Index: ossp-pkg/js/src/perlconnect/Makefile.ref RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/Makefile.ref,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/Makefile.ref,v' | diff -u /dev/null - -L'ossp-pkg/js/src/perlconnect/Makefile.ref' 2>/dev/null --- ossp-pkg/js/src/perlconnect/Makefile.ref +++ - 2025-04-08 06:29:59.505058678 +0200 @@ -0,0 +1,152 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla Communicator client code, released +# March 31, 1998. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1999 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# +# Makefile for the perlconnect extension to javascript. +# + +# +# Stolen with apologies to liveconnect. +# + +DEPTH = .. + +# +# XCFLAGS may be set in the environment or on the gmake command line +# +CC = cc + +CFLAGS += $(OPTIMIZER) $(OS_CFLAGS) $(DEFINES) $(INCLUDES) \ + -DXP_UNIX -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DX86_LINUX \ + -DDEBUG -DDEBUG_livshits -Dbool=char -DHAS_BOOL -DGCC_OPT_BUG -D_XOPEN_SOURCE + +# -DJSFILE $(XCFLAGS)\ +# -DSVR4 -DSYSV -D_BSD_SOURCE -DPOSIX_SOURCE -DX86_LINUX + + +LDFLAGS += -lm $(XLDFLAGS) + +# +# Ask perl what flags it was built with, so we can build js with similar flags +# and link properly. Viva gmake. +# +PERLCFLAGS := $(shell perl -MExtUtils::Embed -e ccopts) +PERLLDFLAGS := $(shell perl -MExtUtils::Embed -e ldopts) + +# perl erroneously reports compiler flag -rdynamic (interpreted by ld +# as -r) when it really meant -export-dynamic. +PERLLDFLAGS := $(subst -rdynamic,-export-dynamic,$(PERLLDFLAGS)) + +CFLAGS += $(PERLCFLAGS) +LDFLAGS += $(PERLLDFLAGS) + + +# For purify +PURE_CFLAGS = -DXP_UNIX $(OPTIMIZER) $(PURE_OS_CFLAGS) $(DEFINES) \ + $(INCLUDES) $(XCFLAGS) + +# +# perlconnect file lists +# +PC_HFILES = \ + jsperl.h \ + $(NULL) + +HFILES = $(PC_HFILES) + +PC_CFILES = \ + jsperl.c \ + JS.c \ + $(NULL) + +#JS.c: JS.xs typemap +# perl jsperlbuild.pl + +LIB_CFILES = $(PC_CFILES) + +PROG_FILE = js + +include $(DEPTH)/config.mk + +# uncomment this if we decide we need a local config dir... +#include config/$(OS_CONFIG).mk + +INCLUDES += -I. -I.. -I../$(OBJDIR) + +ifdef USE_MSVC +OTHER_LIBS += $(DEPTH)/fdlibm/$(OBJDIR)/fdlibm.lib +else +OTHER_LIBS += -L$(DEPTH)/fdlibm/$(OBJDIR) -lfdm +endif + +ifdef JS_THREADSAFE +ifdef USE_MSVC +OTHER_LIBS += $(DEPTH)/../../dist/$(OBJDIR)/lib/nspr3.lib +else +OTHER_LIBS += -L$(DEPTH)/../../dist/$(OBJDIR)/lib -lnspr3 +endif +endif + +ifdef USE_MSVC +LIBRARY = $(OBJDIR)/JS.lib +SHARED_LIBRARY = $(OBJDIR)/JS.dll +PROGRAM = $(OBJDIR)/jsperl.exe +else +LIBRARY = $(OBJDIR)/JS.a +SHARED_LIBRARY = $(OBJDIR)/JS.so +PROGRAM = $(OBJDIR)/jsperl +endif + +include $(DEPTH)/rules.mk + +ifdef USE_MSVC +$(OBJDIR)/$(PROG_FILE)_lc.obj: ../$(PROG_FILE).c + @$(MAKE_OBJDIR) + $(CC) -Fo$@ -c $(CFLAGS) -DPERLCONNECT ../$(PROG_FILE).c + +$(PROGRAM): $(OBJDIR)/$(PROG_FILE)_lc.obj $(LIBRARY) + link.exe -out:"$@" /pdb:"$(OBJDIR)/$(@F:.exe=.pdb)" $(EXE_LINK_FLAGS) ../$(OBJDIR)/js32.lib $? +else +$(OBJDIR)/$(PROG_FILE).o: ../$(PROG_FILE).c + @$(MAKE_OBJDIR) + $(CC) -o $@ -c $(CFLAGS) -DPERLCONNECT ../$(PROG_FILE).c + +$(PROGRAM): $(OBJDIR)/$(PROG_FILE).o + @$(MAKE_OBJDIR) + $(CC) -o $@ $(CFLAGS) $+ $(LIBRARY) ../$(OBJDIR)/libjs.a $(LDFLAGS) $(OTHER_LIBS) +endif Index: ossp-pkg/js/src/perlconnect/Makefile.ref RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/Makefile.ref,v rcsdiff -q -kk '-r1.1' '-r1.1.1.1' -u '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/Makefile.ref,v' 2>/dev/null Index: ossp-pkg/js/src/perlconnect/jsperlbuild.pl RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/jsperlbuild.pl,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/jsperlbuild.pl,v' | diff -u /dev/null - -L'ossp-pkg/js/src/perlconnect/jsperlbuild.pl' 2>/dev/null --- ossp-pkg/js/src/perlconnect/jsperlbuild.pl +++ - 2025-04-08 06:29:59.511863881 +0200 @@ -0,0 +1,81 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla Communicator client code, released +# March 31, 1998. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1999 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# +# Helper perl script to abstract the location of xsubpp +# + +# Thanks to Dave Neuer for the original +# version of this file. Entered as NPL with his permission. + +use File::Find; +use Cwd; + +$notfound = 1; + +foreach(@INC){ + next if /^\.$/; + if(-e $_){ + find(\&find_ExtUtils, $_); + } +} + +if(-e $xsubpp && -e $typemap){ + $res = `perl $xsubpp -typemap $typemap -typemap typemap JS.xs > JS.c`; + if(-e "JS.c"){ + print "Successfuly built JS.c\n"; + exit(0); + } + else{ + die("Couldn't build JS.c: $res"); + } +} +else{ + die("Couldn't locate files neccessary for building JS.c"); +} + +sub find_ExtUtils{ + if($notfound){ + if($File::Find::dir =~ /ExtUtils/){ + my $path = cwd; + $xsubpp = $path . "/xsubpp"; + $typemap = $path . "/typemap"; + undef $notfound; + } + } +} Index: ossp-pkg/js/src/perlconnect/jsperlbuild.pl RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/jsperlbuild.pl,v rcsdiff -q -kk '-r1.1' '-r1.1.1.1' -u '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/jsperlbuild.pl,v' 2>/dev/null Index: ossp-pkg/js/src/perlconnect/test.js RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.js,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.js,v' | diff -u /dev/null - -L'ossp-pkg/js/src/perlconnect/test.js' 2>/dev/null --- ossp-pkg/js/src/perlconnect/test.js +++ - 2025-04-08 06:29:59.518405839 +0200 @@ -0,0 +1,73 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Mozilla Communicator client code, released + * March 31, 1998. + * + * The Initial Developer of the Original Code is + * Netscape Communications Corporation. + * Portions created by the Initial Developer are Copyright (C) 1998 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/******************************************************************************* +* PerlConnect test file. Some primitive testing in "silent mode" -- that is, +* you should be able to run +* perlconnectshell test.js +* without any error messages. See README.html for more info. +*******************************************************************************/ + +// Init +assert(p = new Perl('Sys::Hostname', 'Time::gmtime'), "Perl initialization failed"); +// Simple eval +assert(p.eval("'-' x 3") == '---', "Wrong value returned from eval"); + +assert(p.eval("undef()")==undefined, "Wrong value returned from eval"); +// Arrays +assert(a=p.eval("(1, 2, 3);"), "eval failed, 1"); +assert(a[1]==2, "Wrong value"); +assert(a.length==3, "Wrong length"); +// Hashes +assert(h=p.eval("{'one'=>1, 'two'=>2};"), "eval failed, 2"); +assert(h["two"]==2, "Wrong value"); +// Func. call +assert(p.eval("&hostname()") == p.call("hostname"), "Wrong value returned from eval or call"); +// Complex call +assert(b=p.Time.gmtime.gmtime(), "call failed"); +assert(b.length==9, "Wrong length") +// Variables +// Scalars +assert(p.eval("$a = 100; $b = 'abc';"), "eval failed, 3"); +assert(p.$a ==100, "Wrong variable value, 1"); +assert(p["$b"] == 'abc', "Wrong variable value, 2"); + +/* Auxilary function */ +function assert(cond, msg) +{ + cond || print("Error: " + msg+"\n"); +} // assert Index: ossp-pkg/js/src/perlconnect/test.js RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.js,v rcsdiff -q -kk '-r1.1' '-r1.1.1.1' -u '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.js,v' 2>/dev/null Index: ossp-pkg/js/src/perlconnect/test.pl RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.pl,v co -q -kk -p'1.1' '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.pl,v' | diff -u /dev/null - -L'ossp-pkg/js/src/perlconnect/test.pl' 2>/dev/null --- ossp-pkg/js/src/perlconnect/test.pl +++ - 2025-04-08 06:29:59.524941950 +0200 @@ -0,0 +1,244 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is Mozilla Communicator client code, released +# March 31, 1998. +# +# The Initial Developer of the Original Code is +# Netscape Communications Corporation. +# Portions created by the Initial Developer are Copyright (C) 1998 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 2 or later (the "GPL"), or +# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +# +# Test file for JS.pm +# + +############################################################ +# support packages for test script +############################################################ + +############################################################ +# Fotrik +package Father; + +sub old_meth { + return "Father::old_meth"; +} + + +############################################################ +# Synacek +package Son; +use vars qw( @ISA ); +@ISA = qw( Father ); + +sub new { + my $class = shift; + $class = ref $class || $class; + my $self = {}; + bless $self, $class; + return $self; +} + +sub new_meth { + return "Son::new_meth"; +} + +############################################################ +# Proxy +package Proxy; + +sub new { + my $class = shift; + $class = ref $class || $class; + my $self = { property => shift }; + bless $self, $class; + return $self; +} + +sub getObj { + my $ret = new Son(); + return $ret; +} + +sub getValue { + my $self = shift; + return $self->{ property }; +} + +sub getArray { + my $self = shift; + return [34, 35, 36, 37, 38]; +} + +sub getHash { + my $self = shift; + return { testkey1 => 'testvalue1', + testkey2 => 'testvalue2', + testkey3 => 'testvalue3', }; +} + +############################################################ +# main part of the test script +############################################################ + +package main; +use JS; + +BEGIN { + $| = 1; print "1..12\n"; +} + +END + { print "not ok 1\n" unless $loaded; } + +$loaded = 1; +print "ok 1\n"; + +use strict; #no typos, please + +my $rt = new JS(1_204 ** 2); +my $cx = $rt->createContext(8 * 1_024); + +my $jsval; +my $testc = 1; #testcounter +############################################################ +# the simplest test +$testc++; +$jsval = $cx->eval('6;'); +print $jsval == 6 ? "ok $testc\n" : "not ok $testc\n"; #2 + +############################################################ +#second very simple test +$testc++; +$jsval = $cx->eval('"hallo";'); +print $jsval eq "hallo" ? "ok $testc\n" : "not ok $testc\n"; #3 + +############################################################ +# third very simple test +$testc++; +$jsval = $cx->eval("1.23"); +print $jsval == 1.23 ? "ok $testc\n" : "not ok $testc\n"; #4 + +############################################################ +#undef is little bit tricky +$testc++; +$jsval = $cx->eval('undefined'); +print ! defined $jsval ? "ok $testc\n" : "not ok $testc\n"; #5 + +############################################################ +#can ve tie js objects? (generally to hash, Arrays to arrays too) +$testc++; +$jsval = $cx->eval('foo = new Object(); foo.prop = 11; foo;'); +my %hash; +#read js property +tie %hash, 'JS::Object', $jsval; +print $hash{prop} == 11 ? "ok $testc\n" : "not ok $testc\n"; #6 + +############################################################ +#set js propertry +$testc++; +$hash{prop2} = 2; +$jsval = $cx->eval('foo.prop2;'); +print $jsval == 2 ? "ok $testc\n" : "not ok $testc\n"; #7 + +############################################################ +#tie array +$testc++; +my @arr; +$jsval = $cx->eval('arr = new Array(); arr[0] = 0; arr[1] = 1; arr;'); +tie @arr, "JS::Object", $jsval; +print ((($#arr == 1) && ($arr[1] == 1)) ? "ok $testc\n" : "not ok $testc\n");#8 + +############################################################ +# object delegation test +$testc++; +$cx->createObject(new Proxy("init_value"), "perlobj", + { getObj => \&Proxy::getObj, + getValue => \&Proxy::getValue, + getArray => \&Proxy::getArray, + getHash => \&Proxy::getHash, + }); +$jsval = $cx->eval("perlobj.getValue()"); +print $jsval eq "init_value" ? "ok $testc\n" : "not ok $testc\n"; #9 + +############################################################ +# perl object returned to js +$testc++; +$jsval = $cx->eval("po = perlobj.getObj(); po.new_meth()"); +print $jsval eq "Son::new_meth" ? "ok $testc\n" : "not ok $testc\n"; #10 + +############################################################ +# and what about inherited methods? +$testc++; +$jsval = $cx->eval("po.old_meth()"); +print $jsval eq "Father::old_meth" ? "ok $testc\n" : "not ok $testc\n"; #11 + +############################################################ +# pass an array, check the element +$testc++; +$jsval = $cx->eval("parr = perlobj.getArray(); parr[2];"); +print $jsval == 36 ? "ok $testc\n" : "not ok $testc\n"; #12 + +############################################################ +# check the array length +$testc++; +$jsval = $cx->eval("parr.length"); +print $jsval == 5 ? "ok $testc\n" : "not ok $testc\n"; #13 + +############################################################ +# pass a hash, check the element +$testc++; +$jsval = $cx->eval("phash = perlobj.getHash(); phash.testkey1;"); +print $jsval eq 'testvalue1' ? "ok $testc\n" : "not ok $testc\n"; #14 + +############################################################ +# error test +$testc++; +my $line; +my $err; +sub js_ErrorReporter { + my ($msg, $file, $line, $linebuf, $token) = @_; + $err = "line $line $msg"; +} +$cx->setErrorReporter( \&js_ErrorReporter ); +$cx->eval("x = 2 + 4;\nx.method()\n"); +print $err =~ /^line 1/ ? "ok $testc\n" : "not ok $testc\n"; #15 + +############################################################ +# cleanup +# so far we have to undef context value, to make sure, +# it is disposed before runtime +undef $cx; +undef $rt; + +__END__ + + Index: ossp-pkg/js/src/perlconnect/test.pl RCS File: /v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.pl,v rcsdiff -q -kk '-r1.1' '-r1.1.1.1' -u '/v/ossp/cvs/ossp-pkg/js/src/perlconnect/Attic/test.pl,v' 2>/dev/null