Divided JS.pm into two modules to break dependencies between jsperl.c support functions

and functions exporsed from Perl. test.pl fails one of the tests -- need to look at that.
Worspace  build settings also changed.
This commit is contained in:
val4%cornell.edu 1999-03-02 22:53:16 +00:00
Родитель 0f9ddb452a
Коммит 1e2152d706
7 изменённых файлов: 46 добавлений и 152 удалений

Просмотреть файл

@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="JS" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@ -22,6 +22,7 @@ CFG=JS - Win32 Debug
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@ -42,8 +43,8 @@ RSC=rc.exe
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
@ -67,10 +68,10 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I ".." /I "$(PERL_SRC)" /I "$(PERL_SRC)\win32" /I "$(PERL_SRC)\win32\include" /D "_WINDOWS" /D "WIN32" /D "_DEBUG" /D "XP_PC" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "d:\opc\ns\js\ref" /I "$(PERL_SRC)" /I "$(PERL_SRC)\win32" /I "$(PERL_SRC)\win32\include" /I ".." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "XP_PC" /YX /FD /c
# SUBTRACT CPP /Gy /Fr
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
@ -78,7 +79,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 js32.lib PerlConnect.lib perl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"e:\perl\lib\auto\JS\JS.dll" /pdbtype:sept /libpath:"..\Debug" /libpath:"$(PERL_SRC)"
# ADD LINK32 js32.lib perl.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /out:"z:\livshits\src\perl\lib\auto\JS\JS.dll" /pdbtype:sept /libpath:"..\Debug" /libpath:"$(PERL_SRC)"
!ENDIF
@ -94,5 +95,13 @@ SOURCE=.\JS.c
SOURCE=.\JS.def
# End Source File
# Begin Source File
SOURCE=.\jsperl.c
# End Source File
# Begin Source File
SOURCE=.\jsperlpvt.h
# End Source File
# End Target
# End Project

Просмотреть файл

@ -15,133 +15,20 @@
# Reserved.
#
#
# PerlConnect support package.
#
############################################################################
# PerlConnect support package. 8/3/98 2:50PM
# See README.html and JS.xs for information about this module.
# JS.pm is a Perl interface to JavaScript 3/2/99 5:23PM
# The packages implemented here include
# JS, JS::Runtime, JS::Contents, JS::Object
# See README.html for more information about this module.
############################################################################
package JS;
$VERSION = '0.03';
require Exporter;
require DynaLoader;
@ISA = qw(Exporter DynaLoader);
@EXPORT_OK = qw(perl_eval perl_resolve perl_call $js $ver);
$VERSION = '0.02';
# version string for the interpreter
$ver = "[Perl Interpreter: Version $] compiled under $^O]\n";
$DEBUG = undef;
############################################################################
# TODO: This will be added
############################################################################
sub AUTOLOAD #7/28/98 8:24PM
{
print "\nJS::AUTOLOAD: $AUTOLOAD, not implemented yet\n" if $DEBUG;
} ##AUTOLOAD
############################################################################
# Evaluates the parameter and returns the return result of eval() as a
# reference
############################################################################
sub perl_eval #7/15/98 5:13PM
{
my($stmt) = shift;
package main;
my(@_js) = eval($stmt);
package JS;
my($_js) = (scalar(@_js)==1)?$_js[0]:\@_js;
undef $js;
$js = (ref $_js) ? $_js: \$_js;
print "Failure in perl_call!" unless ref $js;
} ##perl_eval
############################################################################
# Calls the procesure passed as the first parameter and passes the rest of
# the arguments to it. The return result is converted to a reference as
# before
############################################################################
sub perl_call #7/21/98 2:16PM
{
my($proc) = shift;
my($_js);
$proc =~ s/main:://g;
#print "Calling $proc\n";
package main;
my(@_js) = &$proc(@_);
package JS;
#print "here: ", @_js, "\n";
$_js = (scalar(@_js)==1)?$_js[0]:\@_js;
undef $js;
$js = (ref $_js) ? $_js: \$_js;
#print ref $js;
print "Failure in perl_call!" unless ref $js;
} ##perl_call
############################################################################
# Takes the first parameter and tries to retrieve this variable
############################################################################
sub perl_resolve #7/22/98 10:08AM
{
my($name) = shift;
my(@parts) = split('::', $name);
my($last_part) = pop(@parts);
# variable lookup -- variables must start with $, @, or %
if($last_part =~ /^([\$\@\%])(.+)/){
my($resolved_name) = "$1".join('::', @parts)."::$2";
package main;
my(@_js) = eval($resolved_name);
package JS;
my($_js) = (scalar(@_js)==1)?$_js[0]:\@_js;
undef $js;
$js = (ref $_js) ? $_js: \$_js;
}else{
$name =~ s/main:://g;
# if this function exists
# function -- set $js to 1 to indicate this
if(eval "return defined(&main::$name)"){
print "function $name\n" if $DEBUG;
$js = 1;
# module
}else{
print "must be a module\n" if $DEBUG;
$js=2;
return;
# defined module -- try to do an eval and check $@ to trap errors
# as a result, the module is automatically pre-use'd if it exists
$name =~ s/main:://g;
if(eval "use $name; return !(defined($@));"){
$js = 2;
# o.w. this module is undefined
}else{
$js = 3;
}
}
}
} ##perl_resolve
############################################################################
# Validates package name
############################################################################
sub perl_validate_package #7/22/98 10:15AM
{
print "perl_validate_package\n" if $DEBUG;
my($name) = shift;
print $name if $DEBUG;
$js = $name?1:undef;
} ##perl_validate_package
# test procedure
sub c{
print "da!\n" if wantarray;
print "Called!\n";
return @_;
}
#@ISA = qw(JS);
############################################################################
# Duplicates JS::Context::new is a way

Просмотреть файл

@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="PerlConnect" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
@ -17,13 +17,12 @@ CFG=PerlConnect - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "PerlConnect - Win32 Release" (based on\
"Win32 (x86) Dynamic-Link Library")
!MESSAGE "PerlConnect - Win32 Debug" (based on\
"Win32 (x86) Dynamic-Link Library")
!MESSAGE "PerlConnect - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "PerlConnect - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@ -44,8 +43,8 @@ RSC=rc.exe
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe

Просмотреть файл

@ -1,4 +1,4 @@
Microsoft Developer Studio Workspace File, Format Version 5.00
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################

Просмотреть файл

@ -1,5 +1,5 @@
# Microsoft Developer Studio Project File - Name="PerlConnectShell" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 5.00
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
@ -17,13 +17,12 @@ CFG=PerlConnectShell - Win32 Debug
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "PerlConnectShell - Win32 Release" (based on\
"Win32 (x86) Console Application")
!MESSAGE "PerlConnectShell - Win32 Debug" (based on\
"Win32 (x86) Console Application")
!MESSAGE "PerlConnectShell - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "PerlConnectShell - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
@ -66,7 +65,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I ".." /I "$(PERL_SRC)" /D "_CONSOLE" /D "_MBCS" /D "PERLCONNECT" /D "JSFILE" /D "_WIN32" /D "XP_PC" /D "WIN32" /D "_DEBUG" /Fr /YX /FD /c
# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "D:\OPC\ns\js\ref" /I "D:\OPC\ns\js\ref\perlconnect" /I "$(PERL_SRC)" /I ".." /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "PERLCONNECT" /D "JSFILE" /D "_WIN32" /D "XP_PC" /Fr /YX /FD /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe

Просмотреть файл

@ -171,7 +171,7 @@ PerlConstruct(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *v)
JSObject *perlObject;
JSBool ok;
char *embedding[] = {"", "-e", "0"};
char *t = "use JS qw(perl_eval perl_resolve perl_call $js $ver);";
char *t = "use PerlConnect qw(perl_eval perl_resolve perl_call $js $ver);";
/* create a new interpreter */
perl = perl_alloc();

Просмотреть файл

@ -26,7 +26,7 @@ use JS;
# int
($js->eval("100") == 100) or warn "Wrong value returned from eval()";
# and string
($js->eval("'test string'") == 'test string') or warn "Wrong value returned from eval()";
($js->eval("'test string'") eq 'test string') or warn "Wrong value returned from eval()";
# double TODO: double comparison?
($js->eval("1.25") == 1.25) or warn "Wrong value returned from eval()";
# more complex eval: