Example #1
0
solid_object *solid_get_namespace(solid_object *ns, solid_object *name)
{
	if (ns->type != T_INSTANCE) {
		debug("ns->type: %d", ns->type);
		log_err("Namespace is not an instance");
		exit(1);
	} else {
		hash_map *h = (hash_map *) ns->data;
		solid_object *ret = get_hash(h, solid_get_str_value(name));
		if (ret == NULL) {
			log_err("Variable \"%s\" not in namespace", solid_get_str_value(name));
			exit(1);
		}
		return ret;
	}
}
Example #2
0
void solid_set_namespace(solid_object *ns, solid_object *name, solid_object *o)
{
	if (ns->type != T_INSTANCE) {
		debug("ns->type: %d", ns->type);
		log_err("Namespace is not an instance");
		exit(1);
	} else {
		hash_map *h = (hash_map *) ns->data;
		set_hash(h, solid_get_str_value(name), (void *) o);
	}
}
Example #3
0
int solid_namespace_has(solid_object *ns, solid_object *name)
{
	if (ns->type != T_INSTANCE) {
		debug("ns->type: %d", ns->type);
		log_err("Namespace is not an instance");
		exit(1);
	} else {
		hash_map *h = (hash_map *) ns->data;
		solid_object *ret = get_hash(h, solid_get_str_value(name));
		if (ret == NULL) {
			return 0;
		}
		return 1;
	}
}
Example #4
0
File: solid.c Project: atupal/Solid
void solid_import(solid_vm *vm)
{
	char *input = solid_get_str_value(solid_pop_stack(vm));
	char *dot = strrchr(input, '.');
	char *extension;
	if (!dot || dot == input) {
		extension = "";
	}
	extension = dot + 1;
	if (strcmp(extension, "sol") == 0) {
		solid_object *func = solid_parse_tree(solid_parse_file(input));
		solid_call_func(vm, func);
	} else if (strcmp(extension, "so") == 0) {
		void *handle = dlopen(input, RTLD_LAZY);
		void (*init)(solid_vm *);
		if (handle == NULL) {
			log_err("Loading external library %s failed with error %s", input, dlerror());
		}
		dlerror();
		*(void **) (&init) = dlsym(handle, "solid_init");
		init(vm);
		//dlclose(handle);
	}
}
Example #5
0
File: solid.c Project: atupal/Solid
void solid_compile(solid_vm *vm)
{
	vm->regs[255] = solid_parse_tree(solid_parse_expr(solid_get_str_value(solid_pop_stack(vm))));
}