OSDN Git Service

Callback function is now functional.
authorYoshi <Yoshi@MBPTM.local>
Thu, 28 Oct 2010 15:37:22 +0000 (02:37 +1100)
committerYoshi <Yoshi@MBPTM.local>
Thu, 28 Oct 2010 15:37:22 +0000 (02:37 +1100)
modified:   makefile
modified:   test.js
modified:   xaw.c

.DS_Store
makefile
test.js
xaw.c

index 05c330c..7088dd0 100644 (file)
Binary files a/.DS_Store and b/.DS_Store differ
index 73d5edc..61fc7e5 100644 (file)
--- a/makefile
+++ b/makefile
@@ -1,7 +1,12 @@
 # Makefile
 CC = gcc
 TARGET = js_gui
-OBJECT = main.c js.c interpreter.c xaw.c
+OBJECT =  \
+ main.c \
+ js.c \
+ interpreter.c \
+ xaw.c \
+
 DEBUG = no
 
 ifeq ($(DEBUG),yes)
@@ -10,12 +15,18 @@ else
        DEF :=
 endif
 
-LIB     = -L/usr/X11R6/lib -lXaw -lXmu -lXt -lX11
+LIB     = \
+ -L/usr/X11R6/lib \
+ -lXaw \
+ -lXmu \
+ -lXt \
+ -lX11 \
+
 FRAEMEWORK = -framework JavaScriptCore
 
 $(TARGET) : $(OBJECT)
        @echo "*** Making $(TARGET) ***"
-       $(CC) -Wall -Os $(FRAEMEWORK) $(LIB) -DENABLE_GUI $(DEF) -g -o $(TARGET) $(OBJECT)
+       $(CC) -O3 $(FRAEMEWORK) $(LIB) -DENABLE_GUI $(DEF) -g -o $(TARGET) $(OBJECT)
 
 
 js : main.c js.c interpreter.c
diff --git a/test.js b/test.js
index 3e32041..282b10a 100644 (file)
--- a/test.js
+++ b/test.js
@@ -1,4 +1,5 @@
 var quit = function(){
+print("clicked");
 exit();
 }
 var d = new Date();
diff --git a/xaw.c b/xaw.c
index d87eaeb..41b765c 100644 (file)
--- a/xaw.c
+++ b/xaw.c
@@ -7,22 +7,25 @@
 
 void functionLoader_Gui(JSGlobalContextRef ctx, JSObjectRef jobjGlobal);
 XtAppContext app_con;
-WidgetClass xawWidetTypes[] = {};
+JSContextRef global_ctx;
 XtOrientation xawOrientationDirection[]={XtorientHorizontal, XtorientVertical};
 
 
-Widget *myWidgets;
-xawWidet *myCtrls;
+volatile Widget *myWidgets;
+volatile xawWidet *myCtrls;
 
 int objIDc = 0;
 
+volatile jsCallbackInfo *myCallBacks;
+
 
 /* コールバック関数 */
+#pragma GCC optimization_level 0
 void xawJsCallbackFunction( Widget w, XtPointer client, XtPointer called )
 {
-    jsCallbackInfo* mycallback = (jsCallbackInfo *) client;
-       JSObjectCallAsFunction(mycallback->Context, mycallback->Function, NULL, 0,NULL,NULL);
+       JSObjectCallAsFunction((*(jsCallbackInfo*)client).Context, (*(jsCallbackInfo*)client).Function, NULL, 0,NULL,NULL);
 }
+#pragma GCC optimization_level reset
 
 Widget createForm(Widget* form, xawWindow window)
 {
@@ -41,7 +44,7 @@ Widget createForm(Widget* form, xawWindow window)
 
 Widget createControl(xawWidet widget, jsCallbackInfo* callinfo)
 {
-       myWidgets = (Widget *)realloc( myWidgets, sizeof(Widget)*(objIDc+2) );
+       myWidgets = (Widget *)realloc( (void*)myWidgets, sizeof(Widget)*(objIDc+2) );
        if( myWidgets == NULL )//ポインタが空っぽだったら実行停止。
        {
                printf( "Memory re-allocation failed!\n" );
@@ -63,6 +66,7 @@ Widget createControl(xawWidet widget, jsCallbackInfo* callinfo)
        return myWidgets[objIDc+2];
 }
 
+#pragma GCC optimization_level 0
 static JSValueRef jsControlCreate(
                                                                 JSContextRef        ctx,
                                                                 JSObjectRef         jobj,
@@ -90,7 +94,7 @@ static JSValueRef jsControlCreate(
        //parent
        int parentID    = (int)JSValueToNumber(ctx, 
                                                                                   JSObjectGetProperty(ctx,
-                                                                                                                          JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Parent"), jobjExp),
+                                                                                                                          (JSObjectRef)JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Parent"), jobjExp),
                                                                                                                        JSStringCreateWithUTF8CString("ID"),
                                                                                                                        jobjExp),NULL); 
        //-------
@@ -115,12 +119,18 @@ static JSValueRef jsControlCreate(
        char*           func   =  (char*)malloc(len);
        JSStringGetUTF8CString(jstrCallback, func, len);
 
-       myCtrls = (xawWidet *)realloc( myCtrls, sizeof(xawWidet)*(objIDc+2) );
+       myCtrls = (xawWidet *)realloc( (void*)myCtrls, sizeof(xawWidet)*(objIDc+2) );
        if( myCtrls == NULL )//ポインタが空っぽだったら実行停止。
        {
                printf( "Memory re-allocation failed!\n" );
                exit( 1 );
        }
+       myCallBacks = (xawWidet *)realloc( (void*)myCallBacks, sizeof(xawWidet)*(objIDc+2) );
+       if( myCallBacks == NULL )//ポインタが空っぽだったら実行停止。
+       {
+               printf( "Memory re-allocation failed!\n" );
+               exit( 1 );
+       }
        
        char*           name   =  (char*)malloc(sizeof(char)*16);
        sprintf(name, "%d", objIDc+2);
@@ -135,22 +145,25 @@ static JSValueRef jsControlCreate(
        myCtrls[objIDc+2].Top = T;//y
        myCtrls[objIDc+2].Border = B;
        
-       jsCallbackInfo mycallback;
-       mycallback.Context = ctx;
-       mycallback.Function = NULL;
+       //jsCallbackInfo mycallback;
+       myCallBacks[objIDc+2].Context = ctx;
        
        
        if(!JSValueIsUndefined(ctx, JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Callback"), NULL)))
        {
-               mycallback.Function = JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Callback"), NULL);
+               myCallBacks[objIDc+2].Function = JSObjectGetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("Callback"), NULL);
+       }else {
+               myCallBacks[objIDc+2].Function = NULL;
        }
 
+
        
-       createControl(myCtrls[objIDc+2], &mycallback);
+       createControl(myCtrls[objIDc+2], &(myCallBacks[objIDc+2]));
        r = JSValueMakeNumber(ctx,  objIDc);
        JSObjectSetProperty(ctx, jobjThis, JSStringCreateWithUTF8CString("ID"), r, kJSPropertyAttributeNone, NULL);
        return r;
 }
+#pragma GCC optimization_level reset
 
 static JSValueRef jsWindowCreate(
                                 JSContextRef        ctx,