runtime: move variable definition from runtime to individual scopes
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include <bshell/runtime/cmdcall.h>
|
||||
#include <bshell/runtime/pipeline.h>
|
||||
#include <bshell/runtime/runtime.h>
|
||||
#include <bshell/runtime/scope.h>
|
||||
#include <bshell/status.h>
|
||||
#include <fx/collections/array.h>
|
||||
#include <fx/collections/hashtable.h>
|
||||
@@ -250,7 +251,9 @@ static enum bshell_status eval_instruction(
|
||||
fx_value_get_cstr(pool_value, &s);
|
||||
var = bshell_runtime_find_var(rt, s);
|
||||
if (!var) {
|
||||
var = bshell_runtime_define_var(rt, s);
|
||||
var = bshell_runtime_scope_define_variable(
|
||||
bshell_runtime_get_current_scope(rt),
|
||||
s);
|
||||
}
|
||||
|
||||
bshell_variable_set_value(var, x);
|
||||
|
||||
@@ -68,24 +68,6 @@ bshell_variable *bshell_runtime_find_var(
|
||||
return var;
|
||||
}
|
||||
|
||||
bshell_variable *bshell_runtime_define_var(
|
||||
struct bshell_runtime *rt,
|
||||
const char *name)
|
||||
{
|
||||
struct bshell_runtime_scope *scope = runtime_get_scope(rt);
|
||||
if (!scope) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bshell_variable *var = bshell_variable_create(name);
|
||||
if (!var) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
var_map_put(&scope->s_vars, var);
|
||||
return var;
|
||||
}
|
||||
|
||||
enum bshell_status bshell_runtime_define_function(
|
||||
struct bshell_runtime *rt,
|
||||
bshell_function *func)
|
||||
@@ -149,6 +131,12 @@ bshell_command *bshell_runtime_find_command(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct bshell_runtime_scope *bshell_runtime_get_global_scope(
|
||||
struct bshell_runtime *rt)
|
||||
{
|
||||
return rt->rt_global;
|
||||
}
|
||||
|
||||
struct bshell_runtime_scope *bshell_runtime_get_current_scope(
|
||||
struct bshell_runtime *rt)
|
||||
{
|
||||
|
||||
@@ -116,3 +116,20 @@ fx_hashtable *bshell_runtime_scope_get_functions(
|
||||
{
|
||||
return scope->s_functions;
|
||||
}
|
||||
|
||||
bshell_variable *bshell_runtime_scope_define_variable(
|
||||
struct bshell_runtime_scope *scope,
|
||||
const char *name)
|
||||
{
|
||||
if (!scope) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bshell_variable *var = bshell_variable_create(name);
|
||||
if (!var) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
var_map_put(&scope->s_vars, var);
|
||||
return var;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef BSHELL_RUNTIME_SCOPE_H_
|
||||
#define BSHELL_RUNTIME_SCOPE_H_
|
||||
#ifndef RUNTIME_SCOPE_H_
|
||||
#define RUNTIME_SCOPE_H_
|
||||
|
||||
#include "var-map.h"
|
||||
|
||||
@@ -37,12 +37,14 @@ extern struct bshell_runtime_scope *runtime_push_scope(
|
||||
enum bshell_runtime_scope_type type,
|
||||
bshell_scriptblock *block);
|
||||
extern void runtime_pop_scope(struct bshell_runtime *rt);
|
||||
extern struct bshell_runtime_scope *runtime_get_scope(struct bshell_runtime *rt);
|
||||
extern struct bshell_runtime_scope *runtime_get_scope(
|
||||
struct bshell_runtime *rt);
|
||||
|
||||
extern void bshell_runtime_scope_push_value(
|
||||
struct bshell_runtime_scope *scope,
|
||||
const fx_value *value);
|
||||
extern fx_value bshell_runtime_scope_pop_value(struct bshell_runtime_scope *scope);
|
||||
extern fx_value bshell_runtime_scope_pop_value(
|
||||
struct bshell_runtime_scope *scope);
|
||||
|
||||
extern void bshell_runtime_scope_set_block(
|
||||
struct bshell_runtime_scope *scope,
|
||||
|
||||
Reference in New Issue
Block a user