runtime: move variable definition from runtime to individual scopes
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#include <bshell/command/function.h>
|
#include <bshell/command/function.h>
|
||||||
#include <bshell/runtime/pipeline.h>
|
#include <bshell/runtime/pipeline.h>
|
||||||
#include <bshell/runtime/runtime.h>
|
#include <bshell/runtime/runtime.h>
|
||||||
|
#include <bshell/runtime/scope.h>
|
||||||
#include <bshell/runtime/script-block.h>
|
#include <bshell/runtime/script-block.h>
|
||||||
#include <bshell/status.h>
|
#include <bshell/status.h>
|
||||||
#include <fx/collections/array.h>
|
#include <fx/collections/array.h>
|
||||||
@@ -72,8 +73,8 @@ static enum bshell_status process_record(
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
bshell_variable *var = bshell_runtime_define_var(
|
bshell_variable *var = bshell_runtime_scope_define_variable(
|
||||||
rt,
|
bshell_runtime_get_current_scope(rt),
|
||||||
fx_string_get_cstr(param));
|
fx_string_get_cstr(param));
|
||||||
bshell_variable_set_value(var, *arg);
|
bshell_variable_set_value(var, *arg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,9 +32,6 @@ extern fx_value bshell_runtime_eval_script(
|
|||||||
extern bshell_variable *bshell_runtime_find_var(
|
extern bshell_variable *bshell_runtime_find_var(
|
||||||
struct bshell_runtime *rt,
|
struct bshell_runtime *rt,
|
||||||
const char *name);
|
const char *name);
|
||||||
extern bshell_variable *bshell_runtime_define_var(
|
|
||||||
struct bshell_runtime *rt,
|
|
||||||
const char *name);
|
|
||||||
extern enum bshell_status bshell_runtime_define_function(
|
extern enum bshell_status bshell_runtime_define_function(
|
||||||
struct bshell_runtime *rt,
|
struct bshell_runtime *rt,
|
||||||
bshell_function *func);
|
bshell_function *func);
|
||||||
@@ -49,6 +46,8 @@ extern enum bshell_status bshell_runtime_push_scope(
|
|||||||
extern enum bshell_status bshell_runtime_pop_scope(struct bshell_runtime *rt);
|
extern enum bshell_status bshell_runtime_pop_scope(struct bshell_runtime *rt);
|
||||||
extern fx_value bshell_runtime_eval(struct bshell_runtime *rt);
|
extern fx_value bshell_runtime_eval(struct bshell_runtime *rt);
|
||||||
|
|
||||||
|
extern struct bshell_runtime_scope *bshell_runtime_get_global_scope(
|
||||||
|
struct bshell_runtime *rt);
|
||||||
extern struct bshell_runtime_scope *bshell_runtime_get_current_scope(
|
extern struct bshell_runtime_scope *bshell_runtime_get_current_scope(
|
||||||
struct bshell_runtime *rt);
|
struct bshell_runtime *rt);
|
||||||
extern struct bshell_runtime_scope *bshell_runtime_get_parent_scope(
|
extern struct bshell_runtime_scope *bshell_runtime_get_parent_scope(
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
#ifndef BSHELL_RUNTIME_SCOPE_H_
|
#ifndef BSHELL_RUNTIME_SCOPE_H_
|
||||||
#define BSHELL_RUNTIME_SCOPE_H_
|
#define BSHELL_RUNTIME_SCOPE_H_
|
||||||
|
|
||||||
|
#include <bshell/runtime/var.h>
|
||||||
#include <fx/collections/hashtable.h>
|
#include <fx/collections/hashtable.h>
|
||||||
|
|
||||||
struct bshell_runtime_scope;
|
struct bshell_runtime_scope;
|
||||||
|
|
||||||
extern fx_hashtable *bshell_runtime_scope_get_functions(
|
extern fx_hashtable *bshell_runtime_scope_get_functions(
|
||||||
struct bshell_runtime_scope *scope);
|
struct bshell_runtime_scope *scope);
|
||||||
|
extern bshell_variable *bshell_runtime_scope_define_variable(
|
||||||
|
struct bshell_runtime_scope *scope,
|
||||||
|
const char *name);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <bshell/runtime/cmdcall.h>
|
#include <bshell/runtime/cmdcall.h>
|
||||||
#include <bshell/runtime/pipeline.h>
|
#include <bshell/runtime/pipeline.h>
|
||||||
#include <bshell/runtime/runtime.h>
|
#include <bshell/runtime/runtime.h>
|
||||||
|
#include <bshell/runtime/scope.h>
|
||||||
#include <bshell/status.h>
|
#include <bshell/status.h>
|
||||||
#include <fx/collections/array.h>
|
#include <fx/collections/array.h>
|
||||||
#include <fx/collections/hashtable.h>
|
#include <fx/collections/hashtable.h>
|
||||||
@@ -250,7 +251,9 @@ static enum bshell_status eval_instruction(
|
|||||||
fx_value_get_cstr(pool_value, &s);
|
fx_value_get_cstr(pool_value, &s);
|
||||||
var = bshell_runtime_find_var(rt, s);
|
var = bshell_runtime_find_var(rt, s);
|
||||||
if (!var) {
|
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);
|
bshell_variable_set_value(var, x);
|
||||||
|
|||||||
@@ -68,24 +68,6 @@ bshell_variable *bshell_runtime_find_var(
|
|||||||
return 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(
|
enum bshell_status bshell_runtime_define_function(
|
||||||
struct bshell_runtime *rt,
|
struct bshell_runtime *rt,
|
||||||
bshell_function *func)
|
bshell_function *func)
|
||||||
@@ -149,6 +131,12 @@ bshell_command *bshell_runtime_find_command(
|
|||||||
return NULL;
|
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_scope *bshell_runtime_get_current_scope(
|
||||||
struct bshell_runtime *rt)
|
struct bshell_runtime *rt)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -116,3 +116,20 @@ fx_hashtable *bshell_runtime_scope_get_functions(
|
|||||||
{
|
{
|
||||||
return scope->s_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_
|
#ifndef RUNTIME_SCOPE_H_
|
||||||
#define BSHELL_RUNTIME_SCOPE_H_
|
#define RUNTIME_SCOPE_H_
|
||||||
|
|
||||||
#include "var-map.h"
|
#include "var-map.h"
|
||||||
|
|
||||||
@@ -37,12 +37,14 @@ extern struct bshell_runtime_scope *runtime_push_scope(
|
|||||||
enum bshell_runtime_scope_type type,
|
enum bshell_runtime_scope_type type,
|
||||||
bshell_scriptblock *block);
|
bshell_scriptblock *block);
|
||||||
extern void runtime_pop_scope(struct bshell_runtime *rt);
|
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(
|
extern void bshell_runtime_scope_push_value(
|
||||||
struct bshell_runtime_scope *scope,
|
struct bshell_runtime_scope *scope,
|
||||||
const fx_value *value);
|
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(
|
extern void bshell_runtime_scope_set_block(
|
||||||
struct bshell_runtime_scope *scope,
|
struct bshell_runtime_scope *scope,
|
||||||
|
|||||||
Reference in New Issue
Block a user