Browse Source

support loading native functions from the main program using special `builtin` name (#81)

useful when embedding hashlink
Dan Korostelev 7 năm trước cách đây
mục cha
commit
52377f9d24
1 tập tin đã thay đổi với 20 bổ sung16 xóa
  1. 20 16
      src/module.c

+ 20 - 16
src/module.c

@@ -151,7 +151,7 @@ hl_module *hl_module_alloc( hl_code *c ) {
 	int gsize = 0;
 	hl_module *m = (hl_module*)malloc(sizeof(hl_module));
 	if( m == NULL )
-		return NULL;	
+		return NULL;
 	memset(m,0,sizeof(hl_module));
 	m->code = c;
 	m->globals_indexes = (int*)malloc(sizeof(int)*c->nglobals);
@@ -244,25 +244,29 @@ int hl_module_init( hl_module *m, void *stack_top_val ) {
 			if( curlib != n->lib ) {
 				curlib = n->lib;
 				strcpy(tmp,n->lib);
-				if( strcmp(n->lib,"std") == 0 )
-#				ifndef HL_WIN
-					libHandler = RTLD_DEFAULT;
+				if( strcmp(n->lib,"builtin") == 0 )
+					libHandler = dlopen(NULL,RTLD_LAZY);
 				else {
-#				else
-					strcpy(tmp, "libhl.dll");
-				else
-#				endif
-#					ifdef HL_64
-					strcpy(tmp+strlen(tmp),"64.hdll");
+					if( strcmp(n->lib,"std") == 0 )
+#					ifndef HL_WIN
+						libHandler = RTLD_DEFAULT;
+					else {
 #					else
-					strcpy(tmp+strlen(tmp),".hdll");
+						strcpy(tmp, "libhl.dll");
+					else
+#					endif
+#						ifdef HL_64
+						strcpy(tmp+strlen(tmp),"64.hdll");
+#						else
+						strcpy(tmp+strlen(tmp),".hdll");
+#						endif
+						libHandler = dlopen(tmp,RTLD_LAZY);
+						if( libHandler == NULL )
+							hl_fatal1("Failed to load library %s",tmp);
+#					ifndef HL_WIN
+					}
 #					endif
-					libHandler = dlopen(tmp,RTLD_LAZY);
-					if( libHandler == NULL )
-						hl_fatal1("Failed to load library %s",tmp);
-#				ifndef HL_WIN
 				}
-#				endif
 			}
 			strcpy(p,"hlp_");
 			p += 4;