Compare commits

...

8 Commits

33 changed files with 1917 additions and 1251 deletions
+1 -1
View File
@@ -46,7 +46,7 @@ hawk_LDFLAGS = $(LDFLAGS_COMMON)
## of different behavior depending on the libtool tag. ## of different behavior depending on the libtool tag.
## ##
hawk_LDADD = $(LIBADD_COMMON) $(LIBM) hawk_LDADD = $(LIBADD_COMMON) $(LIBM)
hawk_DEPENDENCIES = $(srcdir)/hawk.pot $(srcdir)/hawk-ko.po $(srcdir)/hawk-zh_CN.po hawk_DEPENDENCIES = $(srcdir)/hawk.pot $(srcdir)/hawk-ko.po $(srcdir)/hawk-zh_CN.po $(LIBADD_COMMON)
$(srcdir)/hawk.pot: $(hawk_SOURCES) $(srcdir)/hawk.pot: $(hawk_SOURCES)
+1 -1
View File
@@ -407,7 +407,7 @@ hawk_CPPFLAGS = $(CPPFLAGS_COMMON)
hawk_CFLAGS = $(CFLAGS_COMMON) hawk_CFLAGS = $(CFLAGS_COMMON)
hawk_LDFLAGS = $(LDFLAGS_COMMON) hawk_LDFLAGS = $(LDFLAGS_COMMON)
hawk_LDADD = $(LIBADD_COMMON) $(LIBM) hawk_LDADD = $(LIBADD_COMMON) $(LIBM)
hawk_DEPENDENCIES = $(srcdir)/hawk.pot $(srcdir)/hawk-ko.po $(srcdir)/hawk-zh_CN.po hawk_DEPENDENCIES = $(srcdir)/hawk.pot $(srcdir)/hawk-ko.po $(srcdir)/hawk-zh_CN.po $(LIBADD_COMMON)
@ENABLE_HAWKGO_TRUE@hawkgo_SOURCES = \ @ENABLE_HAWKGO_TRUE@hawkgo_SOURCES = \
@ENABLE_HAWKGO_TRUE@ ../hawk.go \ @ENABLE_HAWKGO_TRUE@ ../hawk.go \
@ENABLE_HAWKGO_TRUE@ ../hawk-inst.go \ @ENABLE_HAWKGO_TRUE@ ../hawk-inst.go \
+56 -56
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: hawk 1.0.0\n" "Project-Id-Version: hawk 1.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-15 01:55+0900\n" "POT-Creation-Date: 2026-04-25 12:33+0900\n"
"PO-Revision-Date: 2026-03-28 16:29+0800\n" "PO-Revision-Date: 2026-03-28 16:29+0800\n"
"Last-Translator: <author@hawk>\n" "Last-Translator: <author@hawk>\n"
"Language-Team: Korean <translation-team-ko@hawk>\n" "Language-Team: Korean <translation-team-ko@hawk>\n"
@@ -17,232 +17,232 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: ../../bin/hawk.c:376 #: ../../bin/hawk.c:378
msgid "enable concatenation by blanks" msgid "enable concatenation by blanks"
msgstr "공백에 의한 연결을 활성화" msgstr "공백에 의한 연결을 활성화"
#: ../../bin/hawk.c:377 #: ../../bin/hawk.c:379
msgid "use CRLF for a newline" msgid "use CRLF for a newline"
msgstr "줄바꿈에 CRLF를 사용" msgstr "줄바꿈에 CRLF를 사용"
#: ../../bin/hawk.c:378 #: ../../bin/hawk.c:380
msgid "defer resolving module symbols(mod::symbol) to runtime" msgid "defer resolving module symbols(mod::symbol) to runtime"
msgstr "모듈 심볼(mod::symbol) 해석을 실행 시간으로 연기" msgstr "모듈 심볼(mod::symbol) 해석을 실행 시간으로 연기"
#: ../../bin/hawk.c:379 #: ../../bin/hawk.c:381
msgid "allow a map to be assigned or returned" msgid "allow a map to be assigned or returned"
msgstr "맵의 대입 또는 반환을 허용" msgstr "맵의 대입 또는 반환을 허용"
#: ../../bin/hawk.c:380 #: ../../bin/hawk.c:382
msgid "allow undeclared variables" msgid "allow undeclared variables"
msgstr "지역 변수가 너무 많음" msgstr "지역 변수가 너무 많음"
#: ../../bin/hawk.c:381 #: ../../bin/hawk.c:383
msgid "allow raw multiline string and regular expression literals" msgid "allow raw multiline string and regular expression literals"
msgstr "문자열 또는 정규식이 닫히지 않음" msgstr "문자열 또는 정규식이 닫히지 않음"
#: ../../bin/hawk.c:382 #: ../../bin/hawk.c:384
msgid "perform numeric comparsion on numeric strings" msgid "perform numeric comparsion on numeric strings"
msgstr "숫자 문자열에 대해 숫자 비교를 수행" msgstr "숫자 문자열에 대해 숫자 비교를 수행"
#: ../../bin/hawk.c:383 #: ../../bin/hawk.c:385
msgid "enable a newline to terminate a statement" msgid "enable a newline to terminate a statement"
msgstr "줄바꿈으로 문장을 끝낼 수 있게 함" msgstr "줄바꿈으로 문장을 끝낼 수 있게 함"
#: ../../bin/hawk.c:384 #: ../../bin/hawk.c:386
msgid "enable nextofile & OFILENAME" msgid "enable nextofile & OFILENAME"
msgstr "nextofile 및 OFILENAME을 활성화" msgstr "nextofile 및 OFILENAME을 활성화"
#: ../../bin/hawk.c:385 #: ../../bin/hawk.c:387
msgid "detect a numeric string and convert it to a number" msgid "detect a numeric string and convert it to a number"
msgstr "숫자형의 문자열을 감지하여 숫자로 변환" msgstr "숫자형의 문자열을 감지하여 숫자로 변환"
#: ../../bin/hawk.c:386 #: ../../bin/hawk.c:388
msgid "enable pattern-action loop" msgid "enable pattern-action loop"
msgstr "패턴-동작 루프를 활성화" msgstr "패턴-동작 루프를 활성화"
#: ../../bin/hawk.c:387 #: ../../bin/hawk.c:389
msgid "enable pedantic mode" msgid "enable pedantic mode"
msgstr "엄격 모드를 활성화" msgstr "엄격 모드를 활성화"
#: ../../bin/hawk.c:388 #: ../../bin/hawk.c:390
msgid "set CLOEXEC before executing an external program for piping" msgid "set CLOEXEC before executing an external program for piping"
msgstr "파이프용 외부 프로그램 실행 전에 CLOEXEC를 설정" msgstr "파이프용 외부 프로그램 실행 전에 CLOEXEC를 설정"
#: ../../bin/hawk.c:389 #: ../../bin/hawk.c:391
msgid "enable {n,m} in a regular expression" msgid "enable {n,m} in a regular expression"
msgstr "정규식 일치에서 {n,m}을 표현을 활성화" msgstr "정규식 일치에서 {n,m}을 표현을 활성화"
#: ../../bin/hawk.c:390 #: ../../bin/hawk.c:392
msgid "enable builtin I/O including getline & print" msgid "enable builtin I/O including getline & print"
msgstr "getline 및 print를 포함한 내장 I/O를 활성화" msgstr "getline 및 print를 포함한 내장 I/O를 활성화"
#: ../../bin/hawk.c:391 #: ../../bin/hawk.c:393
msgid "allow a dual-directional pipe" msgid "allow a dual-directional pipe"
msgstr "양방향 파이프를 허용" msgstr "양방향 파이프를 허용"
#: ../../bin/hawk.c:392 #: ../../bin/hawk.c:394
msgid "enable the strict naming rule" msgid "enable the strict naming rule"
msgstr "엄격한 이름 규칙을 활성화" msgstr "엄격한 이름 규칙을 활성화"
#: ../../bin/hawk.c:393 #: ../../bin/hawk.c:395
msgid "strip spaces in splitting a record" msgid "strip spaces in splitting a record"
msgstr "레코드 분리 시 공백을 제거" msgstr "레코드 분리 시 공백을 제거"
#: ../../bin/hawk.c:394 #: ../../bin/hawk.c:396
msgid "strip spaces in string-to-number conversion" msgid "strip spaces in string-to-number conversion"
msgstr "문자열을 숫자로 변환할 때 공백을 제거" msgstr "문자열을 숫자로 변환할 때 공백을 제거"
#: ../../bin/hawk.c:395 #: ../../bin/hawk.c:397
msgid "make more fault-tolerant" msgid "make more fault-tolerant"
msgstr "오류 허용성을 높임" msgstr "오류 허용성을 높임"
#: ../../bin/hawk.c:396 #: ../../bin/hawk.c:398
msgid "enable the extended call syntax" msgid "enable the extended call syntax"
msgstr "확장 호출 문법을 활성화" msgstr "확장 호출 문법을 활성화"
#: ../../bin/hawk.c:407 ../../bin/main.c:410 #: ../../bin/hawk.c:409 ../../bin/main.c:410
msgid "USAGE" msgid "USAGE"
msgstr "사용법" msgstr "사용법"
#: ../../bin/hawk.c:407 #: ../../bin/hawk.c:409
msgid "[options] -f sourcefile [ -- ] [datafile]*" msgid "[options] -f sourcefile [ -- ] [datafile]*"
msgstr "[옵션] -f 소스파일 [ -- ] [자료파일]*" msgstr "[옵션] -f 소스파일 [ -- ] [자료파일]*"
#: ../../bin/hawk.c:408 #: ../../bin/hawk.c:410
msgid " " msgid " "
msgstr " " msgstr " "
#: ../../bin/hawk.c:408 #: ../../bin/hawk.c:410
msgid "[options] [ -- ] sourcestring [datafile]*" msgid "[options] [ -- ] sourcestring [datafile]*"
msgstr "[옵션] [ -- ] 소스문자열 [자료파일]*" msgstr "[옵션] [ -- ] 소스문자열 [자료파일]*"
#: ../../bin/hawk.c:409 ../../bin/main.c:411 #: ../../bin/hawk.c:411 ../../bin/main.c:411
msgid "Options as follows:" msgid "Options as follows:"
msgstr "옵션은 다음과 같습니다:" msgstr "옵션은 다음과 같습니다:"
#: ../../bin/hawk.c:410 #: ../../bin/hawk.c:412
msgid " -h/--help print this message" msgid " -h/--help print this message"
msgstr " -h/--help 이 메시지를 출력" msgstr " -h/--help 이 메시지를 출력"
#: ../../bin/hawk.c:411 #: ../../bin/hawk.c:413
msgid " -D show extra information" msgid " -D show extra information"
msgstr " -D 추가 정보를 표시" msgstr " -D 추가 정보를 표시"
#: ../../bin/hawk.c:412 #: ../../bin/hawk.c:414
msgid " -c/--call name call a function instead of entering" msgid " -c/--call name call a function instead of entering"
msgstr " -c/--call 이름 패턴-동작 루프 대신 함수를 호출" msgstr " -c/--call 이름 패턴-동작 루프 대신 함수를 호출"
#: ../../bin/hawk.c:413 #: ../../bin/hawk.c:415
msgid "" msgid ""
" the pattern-action loop. [datafile]* is" " the pattern-action loop. [datafile]* is"
msgstr " [자료파일]* 을 함수 인자로 전달" msgstr " [자료파일]* 을 함수 인자로 전달"
#: ../../bin/hawk.c:414 #: ../../bin/hawk.c:416
msgid " passed to the function as parameters" msgid " passed to the function as parameters"
msgstr " 합니다." msgstr " 합니다."
#: ../../bin/hawk.c:415 #: ../../bin/hawk.c:417
msgid " -f/--file file set the source script file" msgid " -f/--file file set the source script file"
msgstr " -f/--file 파일 소스 스크립트 파일을 지정" msgstr " -f/--file 파일 소스 스크립트 파일을 지정"
#: ../../bin/hawk.c:416 #: ../../bin/hawk.c:418
msgid "" msgid ""
" -d/--deparsed-file file set the deparsed script file to produce" " -d/--deparsed-file file set the deparsed script file to produce"
msgstr "" msgstr ""
" -d/--deparsed-file 파일 디파싱한 스크립트를 저장할 파일을 지정" " -d/--deparsed-file 파일 디파싱한 스크립트를 저장할 파일을 지정"
#: ../../bin/hawk.c:417 #: ../../bin/hawk.c:419
msgid " -t/--console-output file set the console output file" msgid " -t/--console-output file set the console output file"
msgstr " -t/--console-output 파일 콘솔 출력 파일을 지정" msgstr " -t/--console-output 파일 콘솔 출력 파일을 지정"
#: ../../bin/hawk.c:418 #: ../../bin/hawk.c:420
msgid " multiple -t options are allowed" msgid " multiple -t options are allowed"
msgstr " -t 옵션은 여러 번 지정할 수 있음" msgstr " -t 옵션은 여러 번 지정할 수 있음"
#: ../../bin/hawk.c:419 #: ../../bin/hawk.c:421
msgid " -F/--field-separator string set a field separator(FS)" msgid " -F/--field-separator string set a field separator(FS)"
msgstr " -F/--field-separator 문자열 필드 구분자(FS)를 지정" msgstr " -F/--field-separator 문자열 필드 구분자(FS)를 지정"
#: ../../bin/hawk.c:420 #: ../../bin/hawk.c:422
msgid " -v/--assign var=value add a global variable with a value" msgid " -v/--assign var=value add a global variable with a value"
msgstr " -v/--assign 변수=값 값을 가진 전역 변수를 추가" msgstr " -v/--assign 변수=값 값을 가진 전역 변수를 추가"
#: ../../bin/hawk.c:421 #: ../../bin/hawk.c:423
msgid " -m/--memory-limit number limit the memory usage (bytes)" msgid " -m/--memory-limit number limit the memory usage (bytes)"
msgstr " -m/--memory-limit 숫자 메모리 사용량을 제한(바이트)" msgstr " -m/--memory-limit 숫자 메모리 사용량을 제한(바이트)"
#: ../../bin/hawk.c:422 #: ../../bin/hawk.c:424
msgid " -w expand datafile wildcards" msgid " -w expand datafile wildcards"
msgstr " -w 자료 파일 와일드카드를 확장" msgstr " -w 자료 파일 와일드카드를 확장"
#: ../../bin/hawk.c:425 #: ../../bin/hawk.c:427
msgid " --script-encoding string specify script file encoding name" msgid " --script-encoding string specify script file encoding name"
msgstr " --script-encoding 문자열 스크립트 파일 인코딩 이름을 지정" msgstr " --script-encoding 문자열 스크립트 파일 인코딩 이름을 지정"
#: ../../bin/hawk.c:426 #: ../../bin/hawk.c:428
#, fuzzy #, fuzzy
msgid " --conin-encoding string specify console input encoding name" msgid " --conin-encoding string specify console input encoding name"
msgstr " --console-encoding 문자열 콘솔 인코딩 이름을 지정" msgstr " --console-encoding 문자열 콘솔 인코딩 이름을 지정"
#: ../../bin/hawk.c:427 #: ../../bin/hawk.c:429
#, fuzzy #, fuzzy
msgid " --conout-encoding string specify console output encoding name" msgid " --conout-encoding string specify console output encoding name"
msgstr " --console-encoding 문자열 콘솔 인코딩 이름을 지정" msgstr " --console-encoding 문자열 콘솔 인코딩 이름을 지정"
#: ../../bin/hawk.c:430 #: ../../bin/hawk.c:432
msgid "" msgid ""
" -I/--includedirs string specify directories to look for include " " -I/--includedirs string specify directories to look for include "
"files in" "files in"
msgstr " -I/--includedirs 문자열 include 파일을 찾을 디렉토리를 지정" msgstr " -I/--includedirs 문자열 include 파일을 찾을 디렉토리를 지정"
#: ../../bin/hawk.c:431 #: ../../bin/hawk.c:433
msgid "" msgid ""
" --modlibdirs string specify directories to look for module " " --modlibdirs string specify directories to look for module "
"files in" "files in"
msgstr " --modlibdirs 문자열 모듈 파일을 찾을 디렉토리를 지정" msgstr " --modlibdirs 문자열 모듈 파일을 찾을 디렉토리를 지정"
#: ../../bin/hawk.c:432 #: ../../bin/hawk.c:434
msgid " --modern run in the modern mode(default)" msgid " --modern run in the modern mode(default)"
msgstr " --modern 현대화 모드로 실행(기본값)" msgstr " --modern 현대화 모드로 실행(기본값)"
#: ../../bin/hawk.c:433 #: ../../bin/hawk.c:435
msgid " --classic run in the classic mode" msgid " --classic run in the classic mode"
msgstr " --classic 고전 모드로 실행" msgstr " --classic 고전 모드로 실행"
#: ../../bin/hawk.c:443 #: ../../bin/hawk.c:445
msgid "Special mode switching options(must be specified first to take effect):" msgid "Special mode switching options(must be specified first to take effect):"
msgstr "모드 전환 옵션(처음에 지정해야 적용됨):" msgstr "모드 전환 옵션(처음에 지정해야 적용됨):"
#: ../../bin/hawk.c:444 ../../bin/main.c:414 #: ../../bin/hawk.c:446 ../../bin/main.c:414
msgid " --awk/--hawk switch to the awk mode(default)" msgid " --awk/--hawk switch to the awk mode(default)"
msgstr " --awk/--hawk awk 모드로 전환(기본값)" msgstr " --awk/--hawk awk 모드로 전환(기본값)"
#: ../../bin/hawk.c:445 ../../bin/main.c:415 #: ../../bin/hawk.c:447 ../../bin/main.c:415
msgid " --cut switch to the cut mode" msgid " --cut switch to the cut mode"
msgstr " --cut cut 모드로 전환" msgstr " --cut cut 모드로 전환"
#: ../../bin/hawk.c:446 ../../bin/main.c:416 #: ../../bin/hawk.c:448 ../../bin/main.c:416
msgid " --sed switch to the sed mode" msgid " --sed switch to the sed mode"
msgstr " --sed sed 모드로 전환" msgstr " --sed sed 모드로 전환"
#: ../../bin/hawk.c:804 ../../bin/hawk.c:821 #: ../../bin/hawk.c:806 ../../bin/hawk.c:823
msgid "ERROR" msgid "ERROR"
msgstr "오류" msgstr "오류"
#: ../../bin/hawk.c:805 ../../bin/hawk.c:822 #: ../../bin/hawk.c:807 ../../bin/hawk.c:824
msgid "Line" msgid "Line"
msgstr "줄" msgstr "줄"
#: ../../bin/hawk.c:806 ../../bin/hawk.c:823 #: ../../bin/hawk.c:808 ../../bin/hawk.c:825
msgid "Column" msgid "Column"
msgstr "열" msgstr "열"
#: ../../bin/hawk.c:807 ../../bin/hawk.c:824 #: ../../bin/hawk.c:809 ../../bin/hawk.c:826
msgid "Code" msgid "Code"
msgstr "코드" msgstr "코드"
#: ../../bin/hawk.c:808 ../../bin/hawk.c:825 #: ../../bin/hawk.c:810 ../../bin/hawk.c:827
msgid "File " msgid "File "
msgstr "파일 " msgstr "파일 "
+56 -56
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: hawk 1.0.0\n" "Project-Id-Version: hawk 1.0.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-15 01:55+0900\n" "POT-Creation-Date: 2026-04-25 12:33+0900\n"
"PO-Revision-Date: 2026-03-28 17:00+0800\n" "PO-Revision-Date: 2026-03-28 17:00+0800\n"
"Last-Translator: <author@hawk>\n" "Last-Translator: <author@hawk>\n"
"Language-Team: Chinese (Simplified) <translation-team-zh_CN@hawk>\n" "Language-Team: Chinese (Simplified) <translation-team-zh_CN@hawk>\n"
@@ -17,231 +17,231 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
#: ../../bin/hawk.c:376 #: ../../bin/hawk.c:378
msgid "enable concatenation by blanks" msgid "enable concatenation by blanks"
msgstr "启用空白拼接" msgstr "启用空白拼接"
#: ../../bin/hawk.c:377 #: ../../bin/hawk.c:379
msgid "use CRLF for a newline" msgid "use CRLF for a newline"
msgstr "换行使用 CRLF" msgstr "换行使用 CRLF"
#: ../../bin/hawk.c:378 #: ../../bin/hawk.c:380
msgid "defer resolving module symbols(mod::symbol) to runtime" msgid "defer resolving module symbols(mod::symbol) to runtime"
msgstr "将模块符号(mod::symbol)解析延迟到运行时" msgstr "将模块符号(mod::symbol)解析延迟到运行时"
#: ../../bin/hawk.c:379 #: ../../bin/hawk.c:381
msgid "allow a map to be assigned or returned" msgid "allow a map to be assigned or returned"
msgstr "允许对映射进行赋值或返回" msgstr "允许对映射进行赋值或返回"
#: ../../bin/hawk.c:380 #: ../../bin/hawk.c:382
msgid "allow undeclared variables" msgid "allow undeclared variables"
msgstr "局部变量过多" msgstr "局部变量过多"
#: ../../bin/hawk.c:381 #: ../../bin/hawk.c:383
msgid "allow raw multiline string and regular expression literals" msgid "allow raw multiline string and regular expression literals"
msgstr "字符串或正则表达式未结束" msgstr "字符串或正则表达式未结束"
#: ../../bin/hawk.c:382 #: ../../bin/hawk.c:384
msgid "perform numeric comparsion on numeric strings" msgid "perform numeric comparsion on numeric strings"
msgstr "对数字字符串执行数值比较" msgstr "对数字字符串执行数值比较"
#: ../../bin/hawk.c:383 #: ../../bin/hawk.c:385
msgid "enable a newline to terminate a statement" msgid "enable a newline to terminate a statement"
msgstr "启用以换行结束语句" msgstr "启用以换行结束语句"
#: ../../bin/hawk.c:384 #: ../../bin/hawk.c:386
msgid "enable nextofile & OFILENAME" msgid "enable nextofile & OFILENAME"
msgstr "启用 nextofile 和 OFILENAME" msgstr "启用 nextofile 和 OFILENAME"
#: ../../bin/hawk.c:385 #: ../../bin/hawk.c:387
msgid "detect a numeric string and convert it to a number" msgid "detect a numeric string and convert it to a number"
msgstr "检测数字字符串并将其转换为数字" msgstr "检测数字字符串并将其转换为数字"
#: ../../bin/hawk.c:386 #: ../../bin/hawk.c:388
msgid "enable pattern-action loop" msgid "enable pattern-action loop"
msgstr "启用模式-动作循环" msgstr "启用模式-动作循环"
#: ../../bin/hawk.c:387 #: ../../bin/hawk.c:389
msgid "enable pedantic mode" msgid "enable pedantic mode"
msgstr "启用严格模式" msgstr "启用严格模式"
#: ../../bin/hawk.c:388 #: ../../bin/hawk.c:390
msgid "set CLOEXEC before executing an external program for piping" msgid "set CLOEXEC before executing an external program for piping"
msgstr "在执行用于管道的外部程序前设置 CLOEXEC" msgstr "在执行用于管道的外部程序前设置 CLOEXEC"
#: ../../bin/hawk.c:389 #: ../../bin/hawk.c:391
msgid "enable {n,m} in a regular expression" msgid "enable {n,m} in a regular expression"
msgstr "在正则表达式中启用 {n,m}" msgstr "在正则表达式中启用 {n,m}"
#: ../../bin/hawk.c:390 #: ../../bin/hawk.c:392
msgid "enable builtin I/O including getline & print" msgid "enable builtin I/O including getline & print"
msgstr "启用内建 I/O,包括 getline 和 print" msgstr "启用内建 I/O,包括 getline 和 print"
#: ../../bin/hawk.c:391 #: ../../bin/hawk.c:393
msgid "allow a dual-directional pipe" msgid "allow a dual-directional pipe"
msgstr "允许双向管道" msgstr "允许双向管道"
#: ../../bin/hawk.c:392 #: ../../bin/hawk.c:394
msgid "enable the strict naming rule" msgid "enable the strict naming rule"
msgstr "启用严格命名规则" msgstr "启用严格命名规则"
#: ../../bin/hawk.c:393 #: ../../bin/hawk.c:395
msgid "strip spaces in splitting a record" msgid "strip spaces in splitting a record"
msgstr "在分割记录时去除空格" msgstr "在分割记录时去除空格"
#: ../../bin/hawk.c:394 #: ../../bin/hawk.c:396
msgid "strip spaces in string-to-number conversion" msgid "strip spaces in string-to-number conversion"
msgstr "在字符串转数字时去除空格" msgstr "在字符串转数字时去除空格"
#: ../../bin/hawk.c:395 #: ../../bin/hawk.c:397
msgid "make more fault-tolerant" msgid "make more fault-tolerant"
msgstr "提高容错性" msgstr "提高容错性"
#: ../../bin/hawk.c:396 #: ../../bin/hawk.c:398
msgid "enable the extended call syntax" msgid "enable the extended call syntax"
msgstr "启用扩展调用语法" msgstr "启用扩展调用语法"
#: ../../bin/hawk.c:407 ../../bin/main.c:410 #: ../../bin/hawk.c:409 ../../bin/main.c:410
msgid "USAGE" msgid "USAGE"
msgstr "用法" msgstr "用法"
#: ../../bin/hawk.c:407 #: ../../bin/hawk.c:409
msgid "[options] -f sourcefile [ -- ] [datafile]*" msgid "[options] -f sourcefile [ -- ] [datafile]*"
msgstr "[选项] -f 源文件 [ -- ] [数据文件]*" msgstr "[选项] -f 源文件 [ -- ] [数据文件]*"
#: ../../bin/hawk.c:408 #: ../../bin/hawk.c:410
msgid " " msgid " "
msgstr " " msgstr " "
#: ../../bin/hawk.c:408 #: ../../bin/hawk.c:410
msgid "[options] [ -- ] sourcestring [datafile]*" msgid "[options] [ -- ] sourcestring [datafile]*"
msgstr "[选项] [ -- ] 源字符串 [数据文件]*" msgstr "[选项] [ -- ] 源字符串 [数据文件]*"
#: ../../bin/hawk.c:409 ../../bin/main.c:411 #: ../../bin/hawk.c:411 ../../bin/main.c:411
msgid "Options as follows:" msgid "Options as follows:"
msgstr "选项如下:" msgstr "选项如下:"
#: ../../bin/hawk.c:410 #: ../../bin/hawk.c:412
msgid " -h/--help print this message" msgid " -h/--help print this message"
msgstr " -h/--help 打印此信息" msgstr " -h/--help 打印此信息"
#: ../../bin/hawk.c:411 #: ../../bin/hawk.c:413
msgid " -D show extra information" msgid " -D show extra information"
msgstr " -D 显示更多信息" msgstr " -D 显示更多信息"
#: ../../bin/hawk.c:412 #: ../../bin/hawk.c:414
msgid " -c/--call name call a function instead of entering" msgid " -c/--call name call a function instead of entering"
msgstr " -c/--call 名称 调用函数而不是进入模式-动作循环" msgstr " -c/--call 名称 调用函数而不是进入模式-动作循环"
#: ../../bin/hawk.c:413 #: ../../bin/hawk.c:415
msgid "" msgid ""
" the pattern-action loop. [datafile]* is" " the pattern-action loop. [datafile]* is"
msgstr " 模式-动作循环。[数据文件]*" msgstr " 模式-动作循环。[数据文件]*"
#: ../../bin/hawk.c:414 #: ../../bin/hawk.c:416
msgid " passed to the function as parameters" msgid " passed to the function as parameters"
msgstr " 将作为参数传递给函数" msgstr " 将作为参数传递给函数"
#: ../../bin/hawk.c:415 #: ../../bin/hawk.c:417
msgid " -f/--file file set the source script file" msgid " -f/--file file set the source script file"
msgstr " -f/--file 文件 设置脚本源文件" msgstr " -f/--file 文件 设置脚本源文件"
#: ../../bin/hawk.c:416 #: ../../bin/hawk.c:418
msgid "" msgid ""
" -d/--deparsed-file file set the deparsed script file to produce" " -d/--deparsed-file file set the deparsed script file to produce"
msgstr " -d/--deparsed-file 文件 指定反解析脚本输出文件" msgstr " -d/--deparsed-file 文件 指定反解析脚本输出文件"
#: ../../bin/hawk.c:417 #: ../../bin/hawk.c:419
msgid " -t/--console-output file set the console output file" msgid " -t/--console-output file set the console output file"
msgstr " -t/--console-output 文件 设置控制台输出文件" msgstr " -t/--console-output 文件 设置控制台输出文件"
#: ../../bin/hawk.c:418 #: ../../bin/hawk.c:420
msgid " multiple -t options are allowed" msgid " multiple -t options are allowed"
msgstr " 可以指定多个 -t 选项" msgstr " 可以指定多个 -t 选项"
#: ../../bin/hawk.c:419 #: ../../bin/hawk.c:421
msgid " -F/--field-separator string set a field separator(FS)" msgid " -F/--field-separator string set a field separator(FS)"
msgstr " -F/--field-separator 字符串 设置字段分隔符(FS)" msgstr " -F/--field-separator 字符串 设置字段分隔符(FS)"
#: ../../bin/hawk.c:420 #: ../../bin/hawk.c:422
msgid " -v/--assign var=value add a global variable with a value" msgid " -v/--assign var=value add a global variable with a value"
msgstr " -v/--assign 变量=值 添加具有值的全局变量" msgstr " -v/--assign 变量=值 添加具有值的全局变量"
#: ../../bin/hawk.c:421 #: ../../bin/hawk.c:423
msgid " -m/--memory-limit number limit the memory usage (bytes)" msgid " -m/--memory-limit number limit the memory usage (bytes)"
msgstr " -m/--memory-limit 数值 限制内存用量(字节)" msgstr " -m/--memory-limit 数值 限制内存用量(字节)"
#: ../../bin/hawk.c:422 #: ../../bin/hawk.c:424
msgid " -w expand datafile wildcards" msgid " -w expand datafile wildcards"
msgstr " -w 扩展数据文件通配符" msgstr " -w 扩展数据文件通配符"
#: ../../bin/hawk.c:425 #: ../../bin/hawk.c:427
msgid " --script-encoding string specify script file encoding name" msgid " --script-encoding string specify script file encoding name"
msgstr " --script-encoding 字符串 指定脚本文件编码名" msgstr " --script-encoding 字符串 指定脚本文件编码名"
#: ../../bin/hawk.c:426 #: ../../bin/hawk.c:428
#, fuzzy #, fuzzy
msgid " --conin-encoding string specify console input encoding name" msgid " --conin-encoding string specify console input encoding name"
msgstr " --console-encoding 字符串 指定控制台编码名" msgstr " --console-encoding 字符串 指定控制台编码名"
#: ../../bin/hawk.c:427 #: ../../bin/hawk.c:429
#, fuzzy #, fuzzy
msgid " --conout-encoding string specify console output encoding name" msgid " --conout-encoding string specify console output encoding name"
msgstr " --console-encoding 字符串 指定控制台编码名" msgstr " --console-encoding 字符串 指定控制台编码名"
#: ../../bin/hawk.c:430 #: ../../bin/hawk.c:432
msgid "" msgid ""
" -I/--includedirs string specify directories to look for include " " -I/--includedirs string specify directories to look for include "
"files in" "files in"
msgstr " -I/--includedirs 字符串 指定查找 include 文件的目录" msgstr " -I/--includedirs 字符串 指定查找 include 文件的目录"
#: ../../bin/hawk.c:431 #: ../../bin/hawk.c:433
msgid "" msgid ""
" --modlibdirs string specify directories to look for module " " --modlibdirs string specify directories to look for module "
"files in" "files in"
msgstr " --modlibdirs 字符串 指定查找模块文件的目录" msgstr " --modlibdirs 字符串 指定查找模块文件的目录"
#: ../../bin/hawk.c:432 #: ../../bin/hawk.c:434
msgid " --modern run in the modern mode(default)" msgid " --modern run in the modern mode(default)"
msgstr " --modern 以现代模式运行(默认)" msgstr " --modern 以现代模式运行(默认)"
#: ../../bin/hawk.c:433 #: ../../bin/hawk.c:435
msgid " --classic run in the classic mode" msgid " --classic run in the classic mode"
msgstr " --classic 以经典模式运行" msgstr " --classic 以经典模式运行"
#: ../../bin/hawk.c:443 #: ../../bin/hawk.c:445
msgid "Special mode switching options(must be specified first to take effect):" msgid "Special mode switching options(must be specified first to take effect):"
msgstr "特殊模式切换选项(必须先指定才能生效):" msgstr "特殊模式切换选项(必须先指定才能生效):"
#: ../../bin/hawk.c:444 ../../bin/main.c:414 #: ../../bin/hawk.c:446 ../../bin/main.c:414
msgid " --awk/--hawk switch to the awk mode(default)" msgid " --awk/--hawk switch to the awk mode(default)"
msgstr " --awk/--hawk 切换到 awk 模式(默认)" msgstr " --awk/--hawk 切换到 awk 模式(默认)"
#: ../../bin/hawk.c:445 ../../bin/main.c:415 #: ../../bin/hawk.c:447 ../../bin/main.c:415
msgid " --cut switch to the cut mode" msgid " --cut switch to the cut mode"
msgstr " --cut 切换到 cut 模式" msgstr " --cut 切换到 cut 模式"
#: ../../bin/hawk.c:446 ../../bin/main.c:416 #: ../../bin/hawk.c:448 ../../bin/main.c:416
msgid " --sed switch to the sed mode" msgid " --sed switch to the sed mode"
msgstr " --sed 切换到 sed 模式" msgstr " --sed 切换到 sed 模式"
#: ../../bin/hawk.c:804 ../../bin/hawk.c:821 #: ../../bin/hawk.c:806 ../../bin/hawk.c:823
msgid "ERROR" msgid "ERROR"
msgstr "错误" msgstr "错误"
#: ../../bin/hawk.c:805 ../../bin/hawk.c:822 #: ../../bin/hawk.c:807 ../../bin/hawk.c:824
msgid "Line" msgid "Line"
msgstr "行" msgstr "行"
#: ../../bin/hawk.c:806 ../../bin/hawk.c:823 #: ../../bin/hawk.c:808 ../../bin/hawk.c:825
msgid "Column" msgid "Column"
msgstr "列" msgstr "列"
#: ../../bin/hawk.c:807 ../../bin/hawk.c:824 #: ../../bin/hawk.c:809 ../../bin/hawk.c:826
msgid "Code" msgid "Code"
msgstr "代码" msgstr "代码"
#: ../../bin/hawk.c:808 ../../bin/hawk.c:825 #: ../../bin/hawk.c:810 ../../bin/hawk.c:827
msgid "File " msgid "File "
msgstr "文件 " msgstr "文件 "
+12 -10
View File
@@ -179,22 +179,21 @@ static void unset_intr_run (void)
#endif #endif
} }
static hawk_htb_walk_t print_awk_value (hawk_htb_t* map, hawk_htb_pair_t* pair, void* arg) static void print_awk_value (hawk_rtx_t* rtx, const hawk_oocs_t* name, hawk_val_t* val)
{ {
hawk_rtx_t* rtx = (hawk_rtx_t*)arg;
hawk_t* hawk = hawk_rtx_gethawk(rtx); hawk_t* hawk = hawk_rtx_gethawk(rtx);
hawk_ooch_t* str; hawk_ooch_t* str;
hawk_oow_t len; hawk_oow_t len;
hawk_errinf_t oerrinf; hawk_errinf_t oerrinf;
hawk_rtx_geterrinf (rtx, &oerrinf); hawk_rtx_geterrinf(rtx, &oerrinf);
str = hawk_rtx_getvaloocstr(rtx, HAWK_HTB_VPTR(pair), &len); str = hawk_rtx_getvaloocstr(rtx, val, &len);
if (HAWK_UNLIKELY(!str)) if (HAWK_UNLIKELY(!str))
{ {
if (hawk_rtx_geterrnum(rtx) == HAWK_EVALTOSTR) if (hawk_rtx_geterrnum(rtx) == HAWK_EVALTOSTR)
{ {
hawk_logbfmt(hawk, HAWK_LOG_STDERR, "%.*js = [not printable]\n", HAWK_HTB_KLEN(pair), HAWK_HTB_KPTR(pair)); hawk_logbfmt(hawk, HAWK_LOG_STDERR, "%.*js = [not printable]\n", name->len, name->ptr);
hawk_rtx_seterrinf(rtx, &oerrinf); hawk_rtx_seterrinf(rtx, &oerrinf);
} }
else else
@@ -204,11 +203,9 @@ static hawk_htb_walk_t print_awk_value (hawk_htb_t* map, hawk_htb_pair_t* pair,
} }
else else
{ {
hawk_logbfmt(hawk, HAWK_LOG_STDERR, "%.*js = %.*js\n", HAWK_HTB_KLEN(pair), HAWK_HTB_KPTR(pair), len, str); hawk_logbfmt(hawk, HAWK_LOG_STDERR, "%.*js = %.*js\n", name->len, name->ptr, len, str);
hawk_rtx_freevaloocstr(rtx, HAWK_HTB_VPTR(pair), str); hawk_rtx_freevaloocstr(rtx, val, str);
} }
return HAWK_HTB_WALK_FORWARD;
} }
static int add_gvs_to_hawk (hawk_t* hawk, arg_t* arg) static int add_gvs_to_hawk (hawk_t* hawk, arg_t* arg)
@@ -301,6 +298,8 @@ static void dprint_return (hawk_rtx_t* rtx, hawk_val_t* ret)
hawk_t* hawk = hawk_rtx_gethawk(rtx); hawk_t* hawk = hawk_rtx_gethawk(rtx);
hawk_oow_t len; hawk_oow_t len;
hawk_ooch_t* str; hawk_ooch_t* str;
hawk_rtx_nv_itr_t itr;
hawk_val_t* nv;
if (hawk_rtx_isnilval(rtx, ret)) if (hawk_rtx_isnilval(rtx, ret))
{ {
@@ -321,7 +320,10 @@ static void dprint_return (hawk_rtx_t* rtx, hawk_val_t* ret)
} }
hawk_logbfmt(hawk, HAWK_LOG_STDERR, "[NAMED VARIABLES]\n"); hawk_logbfmt(hawk, HAWK_LOG_STDERR, "[NAMED VARIABLES]\n");
hawk_htb_walk(hawk_rtx_getnvmap(rtx), print_awk_value, rtx); for (nv = hawk_rtx_getfirstnv(rtx, &itr); nv; nv = hawk_rtx_getnextnv(rtx, &itr))
{
print_awk_value(rtx, &itr.name, nv);
}
hawk_logbfmt(hawk, HAWK_LOG_STDERR, "[END OF NAMED VARIABLES]\n"); hawk_logbfmt(hawk, HAWK_LOG_STDERR, "[END OF NAMED VARIABLES]\n");
} }
+56 -56
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-15 01:55+0900\n" "POT-Creation-Date: 2026-04-25 12:33+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,229 +17,229 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ../../bin/hawk.c:376 #: ../../bin/hawk.c:378
msgid "enable concatenation by blanks" msgid "enable concatenation by blanks"
msgstr "" msgstr ""
#: ../../bin/hawk.c:377 #: ../../bin/hawk.c:379
msgid "use CRLF for a newline" msgid "use CRLF for a newline"
msgstr "" msgstr ""
#: ../../bin/hawk.c:378 #: ../../bin/hawk.c:380
msgid "defer resolving module symbols(mod::symbol) to runtime" msgid "defer resolving module symbols(mod::symbol) to runtime"
msgstr "" msgstr ""
#: ../../bin/hawk.c:379 #: ../../bin/hawk.c:381
msgid "allow a map to be assigned or returned" msgid "allow a map to be assigned or returned"
msgstr "" msgstr ""
#: ../../bin/hawk.c:380 #: ../../bin/hawk.c:382
msgid "allow undeclared variables" msgid "allow undeclared variables"
msgstr "" msgstr ""
#: ../../bin/hawk.c:381 #: ../../bin/hawk.c:383
msgid "allow raw multiline string and regular expression literals" msgid "allow raw multiline string and regular expression literals"
msgstr "" msgstr ""
#: ../../bin/hawk.c:382 #: ../../bin/hawk.c:384
msgid "perform numeric comparsion on numeric strings" msgid "perform numeric comparsion on numeric strings"
msgstr "" msgstr ""
#: ../../bin/hawk.c:383 #: ../../bin/hawk.c:385
msgid "enable a newline to terminate a statement" msgid "enable a newline to terminate a statement"
msgstr "" msgstr ""
#: ../../bin/hawk.c:384 #: ../../bin/hawk.c:386
msgid "enable nextofile & OFILENAME" msgid "enable nextofile & OFILENAME"
msgstr "" msgstr ""
#: ../../bin/hawk.c:385 #: ../../bin/hawk.c:387
msgid "detect a numeric string and convert it to a number" msgid "detect a numeric string and convert it to a number"
msgstr "" msgstr ""
#: ../../bin/hawk.c:386 #: ../../bin/hawk.c:388
msgid "enable pattern-action loop" msgid "enable pattern-action loop"
msgstr "" msgstr ""
#: ../../bin/hawk.c:387 #: ../../bin/hawk.c:389
msgid "enable pedantic mode" msgid "enable pedantic mode"
msgstr "" msgstr ""
#: ../../bin/hawk.c:388 #: ../../bin/hawk.c:390
msgid "set CLOEXEC before executing an external program for piping" msgid "set CLOEXEC before executing an external program for piping"
msgstr "" msgstr ""
#: ../../bin/hawk.c:389 #: ../../bin/hawk.c:391
msgid "enable {n,m} in a regular expression" msgid "enable {n,m} in a regular expression"
msgstr "" msgstr ""
#: ../../bin/hawk.c:390 #: ../../bin/hawk.c:392
msgid "enable builtin I/O including getline & print" msgid "enable builtin I/O including getline & print"
msgstr "" msgstr ""
#: ../../bin/hawk.c:391 #: ../../bin/hawk.c:393
msgid "allow a dual-directional pipe" msgid "allow a dual-directional pipe"
msgstr "" msgstr ""
#: ../../bin/hawk.c:392 #: ../../bin/hawk.c:394
msgid "enable the strict naming rule" msgid "enable the strict naming rule"
msgstr "" msgstr ""
#: ../../bin/hawk.c:393 #: ../../bin/hawk.c:395
msgid "strip spaces in splitting a record" msgid "strip spaces in splitting a record"
msgstr "" msgstr ""
#: ../../bin/hawk.c:394 #: ../../bin/hawk.c:396
msgid "strip spaces in string-to-number conversion" msgid "strip spaces in string-to-number conversion"
msgstr "" msgstr ""
#: ../../bin/hawk.c:395 #: ../../bin/hawk.c:397
msgid "make more fault-tolerant" msgid "make more fault-tolerant"
msgstr "" msgstr ""
#: ../../bin/hawk.c:396 #: ../../bin/hawk.c:398
msgid "enable the extended call syntax" msgid "enable the extended call syntax"
msgstr "" msgstr ""
#: ../../bin/hawk.c:407 ../../bin/main.c:410 #: ../../bin/hawk.c:409 ../../bin/main.c:410
msgid "USAGE" msgid "USAGE"
msgstr "" msgstr ""
#: ../../bin/hawk.c:407 #: ../../bin/hawk.c:409
msgid "[options] -f sourcefile [ -- ] [datafile]*" msgid "[options] -f sourcefile [ -- ] [datafile]*"
msgstr "" msgstr ""
#: ../../bin/hawk.c:408 #: ../../bin/hawk.c:410
msgid " " msgid " "
msgstr "" msgstr ""
#: ../../bin/hawk.c:408 #: ../../bin/hawk.c:410
msgid "[options] [ -- ] sourcestring [datafile]*" msgid "[options] [ -- ] sourcestring [datafile]*"
msgstr "" msgstr ""
#: ../../bin/hawk.c:409 ../../bin/main.c:411 #: ../../bin/hawk.c:411 ../../bin/main.c:411
msgid "Options as follows:" msgid "Options as follows:"
msgstr "" msgstr ""
#: ../../bin/hawk.c:410 #: ../../bin/hawk.c:412
msgid " -h/--help print this message" msgid " -h/--help print this message"
msgstr "" msgstr ""
#: ../../bin/hawk.c:411 #: ../../bin/hawk.c:413
msgid " -D show extra information" msgid " -D show extra information"
msgstr "" msgstr ""
#: ../../bin/hawk.c:412 #: ../../bin/hawk.c:414
msgid " -c/--call name call a function instead of entering" msgid " -c/--call name call a function instead of entering"
msgstr "" msgstr ""
#: ../../bin/hawk.c:413 #: ../../bin/hawk.c:415
msgid "" msgid ""
" the pattern-action loop. [datafile]* is" " the pattern-action loop. [datafile]* is"
msgstr "" msgstr ""
#: ../../bin/hawk.c:414 #: ../../bin/hawk.c:416
msgid " passed to the function as parameters" msgid " passed to the function as parameters"
msgstr "" msgstr ""
#: ../../bin/hawk.c:415 #: ../../bin/hawk.c:417
msgid " -f/--file file set the source script file" msgid " -f/--file file set the source script file"
msgstr "" msgstr ""
#: ../../bin/hawk.c:416 #: ../../bin/hawk.c:418
msgid "" msgid ""
" -d/--deparsed-file file set the deparsed script file to produce" " -d/--deparsed-file file set the deparsed script file to produce"
msgstr "" msgstr ""
#: ../../bin/hawk.c:417 #: ../../bin/hawk.c:419
msgid " -t/--console-output file set the console output file" msgid " -t/--console-output file set the console output file"
msgstr "" msgstr ""
#: ../../bin/hawk.c:418 #: ../../bin/hawk.c:420
msgid " multiple -t options are allowed" msgid " multiple -t options are allowed"
msgstr "" msgstr ""
#: ../../bin/hawk.c:419 #: ../../bin/hawk.c:421
msgid " -F/--field-separator string set a field separator(FS)" msgid " -F/--field-separator string set a field separator(FS)"
msgstr "" msgstr ""
#: ../../bin/hawk.c:420 #: ../../bin/hawk.c:422
msgid " -v/--assign var=value add a global variable with a value" msgid " -v/--assign var=value add a global variable with a value"
msgstr "" msgstr ""
#: ../../bin/hawk.c:421 #: ../../bin/hawk.c:423
msgid " -m/--memory-limit number limit the memory usage (bytes)" msgid " -m/--memory-limit number limit the memory usage (bytes)"
msgstr "" msgstr ""
#: ../../bin/hawk.c:422 #: ../../bin/hawk.c:424
msgid " -w expand datafile wildcards" msgid " -w expand datafile wildcards"
msgstr "" msgstr ""
#: ../../bin/hawk.c:425 #: ../../bin/hawk.c:427
msgid " --script-encoding string specify script file encoding name" msgid " --script-encoding string specify script file encoding name"
msgstr "" msgstr ""
#: ../../bin/hawk.c:426 #: ../../bin/hawk.c:428
msgid " --conin-encoding string specify console input encoding name" msgid " --conin-encoding string specify console input encoding name"
msgstr "" msgstr ""
#: ../../bin/hawk.c:427 #: ../../bin/hawk.c:429
msgid " --conout-encoding string specify console output encoding name" msgid " --conout-encoding string specify console output encoding name"
msgstr "" msgstr ""
#: ../../bin/hawk.c:430 #: ../../bin/hawk.c:432
msgid "" msgid ""
" -I/--includedirs string specify directories to look for include " " -I/--includedirs string specify directories to look for include "
"files in" "files in"
msgstr "" msgstr ""
#: ../../bin/hawk.c:431 #: ../../bin/hawk.c:433
msgid "" msgid ""
" --modlibdirs string specify directories to look for module " " --modlibdirs string specify directories to look for module "
"files in" "files in"
msgstr "" msgstr ""
#: ../../bin/hawk.c:432 #: ../../bin/hawk.c:434
msgid " --modern run in the modern mode(default)" msgid " --modern run in the modern mode(default)"
msgstr "" msgstr ""
#: ../../bin/hawk.c:433 #: ../../bin/hawk.c:435
msgid " --classic run in the classic mode" msgid " --classic run in the classic mode"
msgstr "" msgstr ""
#: ../../bin/hawk.c:443 #: ../../bin/hawk.c:445
msgid "Special mode switching options(must be specified first to take effect):" msgid "Special mode switching options(must be specified first to take effect):"
msgstr "" msgstr ""
#: ../../bin/hawk.c:444 ../../bin/main.c:414 #: ../../bin/hawk.c:446 ../../bin/main.c:414
msgid " --awk/--hawk switch to the awk mode(default)" msgid " --awk/--hawk switch to the awk mode(default)"
msgstr "" msgstr ""
#: ../../bin/hawk.c:445 ../../bin/main.c:415 #: ../../bin/hawk.c:447 ../../bin/main.c:415
msgid " --cut switch to the cut mode" msgid " --cut switch to the cut mode"
msgstr "" msgstr ""
#: ../../bin/hawk.c:446 ../../bin/main.c:416 #: ../../bin/hawk.c:448 ../../bin/main.c:416
msgid " --sed switch to the sed mode" msgid " --sed switch to the sed mode"
msgstr "" msgstr ""
#: ../../bin/hawk.c:804 ../../bin/hawk.c:821 #: ../../bin/hawk.c:806 ../../bin/hawk.c:823
msgid "ERROR" msgid "ERROR"
msgstr "" msgstr ""
#: ../../bin/hawk.c:805 ../../bin/hawk.c:822 #: ../../bin/hawk.c:807 ../../bin/hawk.c:824
msgid "Line" msgid "Line"
msgstr "" msgstr ""
#: ../../bin/hawk.c:806 ../../bin/hawk.c:823 #: ../../bin/hawk.c:808 ../../bin/hawk.c:825
msgid "Column" msgid "Column"
msgstr "" msgstr ""
#: ../../bin/hawk.c:807 ../../bin/hawk.c:824 #: ../../bin/hawk.c:809 ../../bin/hawk.c:826
msgid "Code" msgid "Code"
msgstr "" msgstr ""
#: ../../bin/hawk.c:808 ../../bin/hawk.c:825 #: ../../bin/hawk.c:810 ../../bin/hawk.c:827
msgid "File " msgid "File "
msgstr "" msgstr ""
+73 -25
View File
@@ -4,16 +4,19 @@ import "hawk"
import "flag" import "flag"
import "fmt" import "fmt"
import "io" import "io"
//import "net/http" //import "net/http"
//import _ "net/http/pprof" //import _ "net/http/pprof"
import "os" import "os"
import "os/signal" import "os/signal"
import "runtime" import "runtime"
import "runtime/debug" import "runtime/debug"
import "sort"
import "strconv" import "strconv"
import "strings" import "strings"
import "sync" import "sync"
import "syscall" import "syscall"
//import "time" //import "time"
type Assign struct { type Assign struct {
@@ -46,6 +49,52 @@ func exit_with_error(msg string, err error) {
os.Exit(1) os.Exit(1)
} }
func dprint_hawk_value(name string, val *hawk.Val) {
var s string
var err error
s, err = val.ToStr()
if err != nil {
fmt.Fprintf(os.Stderr, "%s = [not printable]\n", name)
return
}
fmt.Fprintf(os.Stderr, "%s = %s\n", name, s)
}
func dprint_return(rtx *hawk.Rtx, retv *hawk.Val) {
var named_vars map[string]*hawk.Val
var names []string
var name string
if retv == nil || retv.Type() == hawk.VAL_NIL {
fmt.Fprintf(os.Stderr, "[RETURN] - ***nil***\n")
} else {
var s string
var err error
s, err = retv.ToStr()
if err != nil {
fmt.Fprintf(os.Stderr, "[RETURN] - [not printable]\n")
} else {
fmt.Fprintf(os.Stderr, "[RETURN] - [%s]\n", s)
}
}
fmt.Fprintf(os.Stderr, "[NAMED VARIABLES]\n")
named_vars = make(map[string]*hawk.Val)
rtx.GetNamedVars(named_vars)
names = make([]string, 0, len(named_vars))
for name = range named_vars {
names = append(names, name)
}
sort.Strings(names)
for _, name = range names {
dprint_hawk_value(name, named_vars[name])
}
fmt.Fprintf(os.Stderr, "[END OF NAMED VARIABLES]\n")
}
func parse_args_to_config(cfg *Config) bool { func parse_args_to_config(cfg *Config) bool {
//var flgs *flag.FlagSet //var flgs *flag.FlagSet
var flgs *FlagSet var flgs *FlagSet
@@ -59,7 +108,9 @@ func parse_args_to_config(cfg *Config) bool {
var kv []string var kv []string
var vv string var vv string
kv = strings.SplitN(v, "=", 2) kv = strings.SplitN(v, "=", 2)
if len(kv) >= 2 { vv = kv[1] } if len(kv) >= 2 {
vv = kv[1]
}
cfg.assigns[kv[0]] = Assign{idx: -1, value: vv} cfg.assigns[kv[0]] = Assign{idx: -1, value: vv}
return nil return nil
}) })
@@ -108,7 +159,9 @@ func parse_args_to_config(cfg *Config) bool {
//if flgs.NArg() == 0 { goto wrong_usage} //if flgs.NArg() == 0 { goto wrong_usage}
cfg.data_in_files = flgs.Args() cfg.data_in_files = flgs.Args()
if len(cfg.srcfiles) <= 0 { if len(cfg.srcfiles) <= 0 {
if len(cfg.data_in_files) == 0 { goto wrong_usage } if len(cfg.data_in_files) == 0 {
goto wrong_usage
}
cfg.srcstr = cfg.data_in_files[0] cfg.srcstr = cfg.data_in_files[0]
cfg.data_in_files = cfg.data_in_files[1:] cfg.data_in_files = cfg.data_in_files[1:]
} }
@@ -135,6 +188,7 @@ wrong_usage:
fmt.Fprintf(os.Stderr, "USAGE: %s [options] sourcestring [datafile]*\n", os.Args[0]) fmt.Fprintf(os.Stderr, "USAGE: %s [options] sourcestring [datafile]*\n", os.Args[0])
fmt.Fprintf(os.Stderr, " %s [options] -f sourcefile [datafile]*\n", os.Args[0]) fmt.Fprintf(os.Stderr, " %s [options] -f sourcefile [datafile]*\n", os.Args[0])
fmt.Fprintf(os.Stderr, "Options are:\n") fmt.Fprintf(os.Stderr, "Options are:\n")
fmt.Fprintf(os.Stderr, " -D, --show-extra-info show extra information\n")
fmt.Fprintf(os.Stderr, " -F, --field-separator string specify the field seperator\n") fmt.Fprintf(os.Stderr, " -F, --field-separator string specify the field seperator\n")
fmt.Fprintf(os.Stderr, " -v, --assign name=value set global variable value\n") fmt.Fprintf(os.Stderr, " -v, --assign name=value set global variable value\n")
fmt.Fprintf(os.Stderr, " -c, --call string call a named function instead of running the\n") fmt.Fprintf(os.Stderr, " -c, --call string call a named function instead of running the\n")
@@ -149,7 +203,7 @@ wrong_usage:
return false return false
} }
func run_script(h *hawk.Hawk, fs_idx int, data_idx int, cfg* Config, rtx_chan chan RtxEvent, sig_chan chan os.Signal) error { func run_script(h *hawk.Hawk, fs_idx int, data_idx int, cfg *Config, rtx_chan chan RtxEvent, sig_chan chan os.Signal) error {
var rtx *hawk.Rtx var rtx *hawk.Rtx
var err error var err error
@@ -158,11 +212,13 @@ func run_script(h *hawk.Hawk, fs_idx int, data_idx int, cfg* Config, rtx_chan ch
} else { } else {
var out_idx_end int = data_idx var out_idx_end int = data_idx
if cfg.data_out_files[data_idx] != "" { out_idx_end++ } if cfg.data_out_files[data_idx] != "" {
out_idx_end++
}
rtx, err = h.NewRtx( rtx, err = h.NewRtx(
fmt.Sprintf("%s.%d", os.Args[0], data_idx), fmt.Sprintf("%s.%d", os.Args[0], data_idx),
cfg.data_in_files[data_idx: data_idx + 1], cfg.data_in_files[data_idx:data_idx+1],
cfg.data_out_files[data_idx: out_idx_end], cfg.data_out_files[data_idx:out_idx_end],
) )
} }
if err != nil { if err != nil {
@@ -259,19 +315,7 @@ func run_script(h *hawk.Hawk, fs_idx int, data_idx int, cfg* Config, rtx_chan ch
} }
if cfg.show_extra_info { if cfg.show_extra_info {
var named_vars map[string]*hawk.Val dprint_return(rtx, retv)
var vn string
var vv *hawk.Val
fmt.Printf("[RETURN] - [%v]\n", retv.String())
fmt.Printf("NAMED VARIABLES]\n")
named_vars = make(map[string]*hawk.Val)
rtx.GetNamedVars(named_vars)
for vn, vv = range named_vars {
fmt.Printf("%s = %s\n", vn, vv.String())
}
fmt.Printf("END OF NAMED VARIABLES]\n")
} }
} }
@@ -318,7 +362,7 @@ chan_loop:
delete(rtx_bag, ev.rtx) delete(rtx_bag, ev.rtx)
} }
case sig = <- sig_chan: case sig = <-sig_chan:
var signo syscall.Signal var signo syscall.Signal
var ok bool var ok bool
signo, ok = sig.(syscall.Signal) signo, ok = sig.(syscall.Signal)
@@ -346,7 +390,9 @@ func main() {
debug.SetGCPercent(100) // enable normal GC debug.SetGCPercent(100) // enable normal GC
if parse_args_to_config(&cfg) == false { os.Exit(99) } if parse_args_to_config(&cfg) == false {
os.Exit(99)
}
h, err = hawk.New() h, err = hawk.New()
if err != nil { if err != nil {
@@ -396,7 +442,7 @@ func main() {
goto oops goto oops
} }
if (len(cfg.srcfiles) > 0) { if len(cfg.srcfiles) > 0 {
err = h.ParseFiles(cfg.srcfiles) err = h.ParseFiles(cfg.srcfiles)
} else { } else {
err = h.ParseText(cfg.srcstr) err = h.ParseText(cfg.srcstr)
@@ -437,7 +483,7 @@ func main() {
} }
} }
rtx_chan <- RtxEvent{ rtx: nil, added: false } // to terminate the signal handler rtx_chan <- RtxEvent{rtx: nil, added: false} // to terminate the signal handler
sig_wg.Wait() sig_wg.Wait()
h.Close() h.Close()
@@ -448,11 +494,13 @@ func main() {
return return
oops: oops:
// if rtx != nil { rtx.Close() } // if rtx != nil { rtx.Close() }
if rtx_chan != nil { if rtx_chan != nil {
rtx_chan <- RtxEvent{rtx: nil, added: false} rtx_chan <- RtxEvent{rtx: nil, added: false}
sig_wg.Wait() sig_wg.Wait()
} }
if h != nil { h.Close() } if h != nil {
h.Close()
}
os.Exit(255) os.Exit(255)
} }
+12 -9
View File
@@ -827,17 +827,20 @@ func (rtx *Rtx) SetFuncRetWithStr(v string) error {
} }
func (rtx *Rtx) GetNamedVars(vars map[string]*Val) { func (rtx *Rtx) GetNamedVars(vars map[string]*Val) {
var tab *C.hawk_htb_t var itr C.hawk_rtx_nv_itr_t
var itr C.hawk_htb_itr_t var val *C.hawk_val_t
var pair *C.hawk_htb_pair_t
var k string var k string
var err error
tab = C.hawk_rtx_getnvmap(rtx.c) C.hawk_init_rtx_nv_itr(&itr)
pair = C.hawk_htb_getfirstpair(tab, &itr) val = C.hawk_rtx_getfirstnv(rtx.c, &itr)
for pair != nil { for val != nil {
k = string(uchars_to_rune_slice((*C.hawk_uch_t)(pair.key.ptr), uintptr(pair.key.len))) k = string(uchars_to_rune_slice((*C.hawk_uch_t)(itr.name.ptr), uintptr(itr.name.len)))
vars[k], _ = rtx.make_val(func() *C.hawk_val_t { return (*C.hawk_val_t)(pair.val.ptr) }) vars[k], err = rtx.make_val(func() *C.hawk_val_t { return val })
pair = C.hawk_htb_getnextpair(tab, &itr) if err != nil {
return
}
val = C.hawk_rtx_getnextnv(rtx.c, &itr)
} }
} }
+62 -62
View File
@@ -424,7 +424,7 @@ skip_close:
if (a1) hawk_rtx_freevaloocstr(rtx, a1, opt); if (a1) hawk_rtx_freevaloocstr(rtx, a1, opt);
hawk_rtx_freevaloocstr(rtx, a0, name); hawk_rtx_freevaloocstr(rtx, a0, name);
v = hawk_rtx_makeintval(rtx, (hawk_int_t)n); v = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)n);
if (!v) return -1; if (!v) return -1;
hawk_rtx_setretval(rtx, v); hawk_rtx_setretval(rtx, v);
@@ -547,7 +547,7 @@ static int fnc_fflush (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_rtx_freevaloocstr(rtx, a0, str0); hawk_rtx_freevaloocstr(rtx, a0, str0);
} }
v = hawk_rtx_makeintval(rtx, (hawk_int_t)n); v = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)n);
if (!v) return -1; if (!v) return -1;
hawk_rtx_setretval(rtx, v); hawk_rtx_setretval(rtx, v);
@@ -578,7 +578,7 @@ static int index_or_rindex (hawk_rtx_t* rtx, int rindex)
int n; int n;
a2 = hawk_rtx_getarg(rtx, 2); a2 = hawk_rtx_getarg(rtx, 2);
n = hawk_rtx_valtoint(rtx, a2, &boundary); n = hawk_rtx_valtoint_inline(rtx, a2, &boundary);
if (n <= -1) return -1; if (n <= -1) return -1;
} }
@@ -693,7 +693,7 @@ static int index_or_rindex (hawk_rtx_t* rtx, int rindex)
break; break;
} }
a0 = hawk_rtx_makeintval(rtx, idx); a0 = hawk_rtx_makeintval_inline(rtx, idx);
if (HAWK_UNLIKELY(!a0)) return -1; if (HAWK_UNLIKELY(!a0)) return -1;
hawk_rtx_setretval(rtx, a0); hawk_rtx_setretval(rtx, a0);
@@ -773,7 +773,7 @@ int hawk_fnc_length (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int mode)
} }
} }
v = hawk_rtx_makeintval(rtx, len); v = hawk_rtx_makeintval_inline(rtx, len);
if (HAWK_UNLIKELY(!v)) return -1; if (HAWK_UNLIKELY(!v)) return -1;
hawk_rtx_setretval(rtx, v); hawk_rtx_setretval(rtx, v);
@@ -799,12 +799,12 @@ int hawk_fnc_substr (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a1 = hawk_rtx_getarg(rtx, 1); a1 = hawk_rtx_getarg(rtx, 1);
a2 = (nargs >= 3)? hawk_rtx_getarg(rtx, 2): HAWK_NULL; a2 = (nargs >= 3)? hawk_rtx_getarg(rtx, 2): HAWK_NULL;
n = hawk_rtx_valtoint(rtx, a1, &lindex); n = hawk_rtx_valtoint_inline(rtx, a1, &lindex);
if (n <= -1) return -1; if (n <= -1) return -1;
if (a2) if (a2)
{ {
n = hawk_rtx_valtoint(rtx, a2, &lcount); n = hawk_rtx_valtoint_inline(rtx, a2, &lcount);
if (n <= -1) return -1; if (n <= -1) return -1;
if (lcount < 0) lcount = 0; if (lcount < 0) lcount = 0;
} }
@@ -975,9 +975,9 @@ static int fnc_split (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int use_array)
t1 = use_array? hawk_rtx_makearrval(rtx, 16): hawk_rtx_makemapval(rtx); t1 = use_array? hawk_rtx_makearrval(rtx, 16): hawk_rtx_makemapval(rtx);
if (HAWK_UNLIKELY(!t1)) goto oops; if (HAWK_UNLIKELY(!t1)) goto oops;
hawk_rtx_refupval(rtx, t1); hawk_rtx_refupval_inline(rtx, t1);
x = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 1), t1); x = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 1), t1);
hawk_rtx_refdownval(rtx, t1); hawk_rtx_refdownval_inline(rtx, t1);
if (HAWK_UNLIKELY(x <= -1)) goto oops; if (HAWK_UNLIKELY(x <= -1)) goto oops;
/* fill the map with actual values */ /* fill the map with actual values */
@@ -1028,8 +1028,8 @@ static int fnc_split (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int use_array)
{ {
if (!hawk_rtx_setarrvalfld(rtx, t1, ++nflds, t2)) if (!hawk_rtx_setarrvalfld(rtx, t1, ++nflds, t2))
{ {
hawk_rtx_refupval(rtx, t2); hawk_rtx_refupval_inline(rtx, t2);
hawk_rtx_refdownval(rtx, t2); hawk_rtx_refdownval_inline(rtx, t2);
goto oops; goto oops;
} }
} }
@@ -1044,8 +1044,8 @@ static int fnc_split (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int use_array)
if (!hawk_rtx_setmapvalfld(rtx, t1, key_buf, key_len, t2)) if (!hawk_rtx_setmapvalfld(rtx, t1, key_buf, key_len, t2))
{ {
hawk_rtx_refupval(rtx, t2); hawk_rtx_refupval_inline(rtx, t2);
hawk_rtx_refdownval(rtx, t2); hawk_rtx_refdownval_inline(rtx, t2);
goto oops; goto oops;
} }
} }
@@ -1076,7 +1076,7 @@ static int fnc_split (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int use_array)
hawk_rtx_freerex(rtx, fs_rex_free, HAWK_NULL); hawk_rtx_freerex(rtx, fs_rex_free, HAWK_NULL);
} }
t1 = hawk_rtx_makeintval(rtx, nflds); t1 = hawk_rtx_makeintval_inline(rtx, nflds);
if (HAWK_UNLIKELY(!t1)) return -1; if (HAWK_UNLIKELY(!t1)) return -1;
hawk_rtx_setretval(rtx, t1); hawk_rtx_setretval(rtx, t1);
@@ -1660,14 +1660,14 @@ static int __substitute (hawk_rtx_t* rtx, hawk_oow_t max_count)
hawk_rtx_makestrvalwithoocs(rtx, HAWK_OOECS_OOCS(&rtx->fnc.oout)); hawk_rtx_makestrvalwithoocs(rtx, HAWK_OOECS_OOCS(&rtx->fnc.oout));
if (HAWK_UNLIKELY(!v)) goto oops; if (HAWK_UNLIKELY(!v)) goto oops;
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
n = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 2), v); n = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 2), v);
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
} }
if (HAWK_UNLIKELY(n <= -1)) goto oops; if (HAWK_UNLIKELY(n <= -1)) goto oops;
} }
v = hawk_rtx_makeintval(rtx, sub_count); v = hawk_rtx_makeintval_inline(rtx, sub_count);
if (HAWK_UNLIKELY(!v)) return -1; if (HAWK_UNLIKELY(!v)) return -1;
hawk_rtx_setretval(rtx, v); hawk_rtx_setretval(rtx, v);
@@ -2032,7 +2032,7 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
{ {
hawk_val_t* a2; hawk_val_t* a2;
a2 = hawk_rtx_getarg(rtx, 2); /* when start index is support, this is the thrid argument */ a2 = hawk_rtx_getarg(rtx, 2); /* when start index is support, this is the thrid argument */
if (hawk_rtx_valtoint(rtx, a2, &start) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a2, &start) <= -1) return -1;
} }
HAWK_MEMSET (&submat, 0, HAWK_SIZEOF(submat)); HAWK_MEMSET (&submat, 0, HAWK_SIZEOF(submat));
@@ -2083,15 +2083,15 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
idx = (n == 0)? 0: ((hawk_int_t)(mat.o.ptr - str0.o) + 1); idx = (n == 0)? 0: ((hawk_int_t)(mat.o.ptr - str0.o) + 1);
} }
x0 = hawk_rtx_makeintval(rtx, idx); x0 = hawk_rtx_makeintval_inline(rtx, idx);
if (!x0) goto oops; if (!x0) goto oops;
hawk_rtx_refupval(rtx, x0); hawk_rtx_refupval_inline(rtx, x0);
/* RLENGTH: -1 on no match */ /* RLENGTH: -1 on no match */
HAWK_ASSERT (&mat.o.len == &mat.b.len); HAWK_ASSERT (&mat.o.len == &mat.b.len);
x1 = hawk_rtx_makeintval(rtx, ((n == 0)? (hawk_int_t)-1: (hawk_int_t)mat.o.len)); /* just use mat.o.len regardless of a0_type */ x1 = hawk_rtx_makeintval_inline(rtx, ((n == 0)? (hawk_int_t)-1: (hawk_int_t)mat.o.len)); /* just use mat.o.len regardless of a0_type */
if (!x1) goto oops; if (!x1) goto oops;
hawk_rtx_refupval(rtx, x1); hawk_rtx_refupval_inline(rtx, x1);
if (nargs >= (3 + support_start_index)) if (nargs >= (3 + support_start_index))
{ {
@@ -2105,7 +2105,7 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
x2 = hawk_rtx_makemapval(rtx); x2 = hawk_rtx_makemapval(rtx);
if (HAWK_UNLIKELY(!x2)) goto oops; if (HAWK_UNLIKELY(!x2)) goto oops;
hawk_rtx_refupval(rtx, x2); hawk_rtx_refupval_inline(rtx, x2);
/* add the full match value to the array at index "0" */ /* add the full match value to the array at index "0" */
if (hawk_ooecs_fmt(&rtx->fnc.oout, HAWK_T("%d"), 0) == (hawk_oow_t)-1) goto oops; if (hawk_ooecs_fmt(&rtx->fnc.oout, HAWK_T("%d"), 0) == (hawk_oow_t)-1) goto oops;
@@ -2115,8 +2115,8 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
if (HAWK_UNLIKELY(!tv)) goto oops; if (HAWK_UNLIKELY(!tv)) goto oops;
if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv)) if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv))
{ {
hawk_rtx_refupval(rtx, tv); hawk_rtx_refupval_inline(rtx, tv);
hawk_rtx_refdownval(rtx, tv); hawk_rtx_refdownval_inline(rtx, tv);
goto oops; goto oops;
} }
@@ -2125,12 +2125,12 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
xlen = HAWK_OOECS_LEN(&rtx->fnc.oout); xlen = HAWK_OOECS_LEN(&rtx->fnc.oout);
if (hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("start"), 5) == (hawk_oow_t)-1) goto oops; if (hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("start"), 5) == (hawk_oow_t)-1) goto oops;
tv = hawk_rtx_makeintval(rtx, ((a0_type == HAWK_VAL_MBS)? mat.b.ptr - str0.b + 1: mat.o.ptr - str0.o + 1)); tv = hawk_rtx_makeintval_inline(rtx, ((a0_type == HAWK_VAL_MBS)? mat.b.ptr - str0.b + 1: mat.o.ptr - str0.o + 1));
if (HAWK_UNLIKELY(!tv)) goto oops; if (HAWK_UNLIKELY(!tv)) goto oops;
if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv)) if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv))
{ {
hawk_rtx_refupval(rtx, tv); hawk_rtx_refupval_inline(rtx, tv);
hawk_rtx_refdownval(rtx, tv); hawk_rtx_refdownval_inline(rtx, tv);
goto oops; goto oops;
} }
@@ -2138,12 +2138,12 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
if (hawk_ooecs_setlen(&rtx->fnc.oout, xlen) == (hawk_oow_t)-1 || if (hawk_ooecs_setlen(&rtx->fnc.oout, xlen) == (hawk_oow_t)-1 ||
hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("length"), 6) == (hawk_oow_t)-1) goto oops; hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("length"), 6) == (hawk_oow_t)-1) goto oops;
tv = hawk_rtx_makeintval(rtx, ((a0_type == HAWK_VAL_MBS)? mat.b.len: mat.o.len)); tv = hawk_rtx_makeintval_inline(rtx, ((a0_type == HAWK_VAL_MBS)? mat.b.len: mat.o.len));
if (HAWK_UNLIKELY(!tv)) goto oops; if (HAWK_UNLIKELY(!tv)) goto oops;
if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv)) if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv))
{ {
hawk_rtx_refupval(rtx, tv); hawk_rtx_refupval_inline(rtx, tv);
hawk_rtx_refdownval(rtx, tv); hawk_rtx_refdownval_inline(rtx, tv);
goto oops; goto oops;
} }
@@ -2163,8 +2163,8 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
if (HAWK_UNLIKELY(!tv)) goto oops; if (HAWK_UNLIKELY(!tv)) goto oops;
if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv)) if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv))
{ {
hawk_rtx_refupval(rtx, tv); hawk_rtx_refupval_inline(rtx, tv);
hawk_rtx_refdownval(rtx, tv); hawk_rtx_refdownval_inline(rtx, tv);
goto oops; goto oops;
} }
@@ -2172,24 +2172,24 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
xlen = HAWK_OOECS_LEN(&rtx->fnc.oout); xlen = HAWK_OOECS_LEN(&rtx->fnc.oout);
if (hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("start"), 5) == (hawk_oow_t)-1) goto oops; if (hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("start"), 5) == (hawk_oow_t)-1) goto oops;
tv = hawk_rtx_makeintval(rtx, ((a0_type == HAWK_VAL_MBS)? submat.b[i].ptr - str0.b + 1: submat.o[i].ptr - str0.o + 1)); tv = hawk_rtx_makeintval_inline(rtx, ((a0_type == HAWK_VAL_MBS)? submat.b[i].ptr - str0.b + 1: submat.o[i].ptr - str0.o + 1));
if (HAWK_UNLIKELY(!tv)) goto oops; if (HAWK_UNLIKELY(!tv)) goto oops;
if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv)) if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv))
{ {
hawk_rtx_refupval(rtx, tv); hawk_rtx_refupval_inline(rtx, tv);
hawk_rtx_refdownval(rtx, tv); hawk_rtx_refdownval_inline(rtx, tv);
goto oops; goto oops;
} }
if (hawk_ooecs_setlen(&rtx->fnc.oout, xlen) == (hawk_oow_t)-1 || if (hawk_ooecs_setlen(&rtx->fnc.oout, xlen) == (hawk_oow_t)-1 ||
hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("length"), 6) == (hawk_oow_t)-1) goto oops; hawk_ooecs_ncat(&rtx->fnc.oout, HAWK_T("length"), 6) == (hawk_oow_t)-1) goto oops;
tv = hawk_rtx_makeintval(rtx, ((a0_type == HAWK_VAL_MBS)? submat.b[i].len: submat.o[i].len)); tv = hawk_rtx_makeintval_inline(rtx, ((a0_type == HAWK_VAL_MBS)? submat.b[i].len: submat.o[i].len));
if (HAWK_UNLIKELY(!tv)) goto oops; if (HAWK_UNLIKELY(!tv)) goto oops;
if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv)) if (!hawk_rtx_setmapvalfld(rtx, x2, HAWK_OOECS_PTR(&rtx->fnc.oout), HAWK_OOECS_LEN(&rtx->fnc.oout), tv))
{ {
hawk_rtx_refupval(rtx, tv); hawk_rtx_refupval_inline(rtx, tv);
hawk_rtx_refdownval(rtx, tv); hawk_rtx_refdownval_inline(rtx, tv);
goto oops; goto oops;
} }
} }
@@ -2207,15 +2207,15 @@ static int __fnc_match (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int support_
hawk_rtx_setretval(rtx, x0); hawk_rtx_setretval(rtx, x0);
if (x2) hawk_rtx_refdownval(rtx, x2); if (x2) hawk_rtx_refdownval_inline(rtx, x2);
hawk_rtx_refdownval(rtx, x1); hawk_rtx_refdownval_inline(rtx, x1);
hawk_rtx_refdownval(rtx, x0); hawk_rtx_refdownval_inline(rtx, x0);
return 0; return 0;
oops: oops:
if (x2) hawk_rtx_refdownval(rtx, x2); if (x2) hawk_rtx_refdownval_inline(rtx, x2);
if (x1) hawk_rtx_refdownval(rtx, x1); if (x1) hawk_rtx_refdownval_inline(rtx, x1);
if (x0) hawk_rtx_refdownval(rtx, x0); if (x0) hawk_rtx_refdownval_inline(rtx, x0);
return -1; return -1;
} }
@@ -2329,10 +2329,10 @@ int hawk_fnc_int (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
n = hawk_rtx_valtoint(rtx, a0, &lv); n = hawk_rtx_valtoint_inline(rtx, a0, &lv);
if (n <= -1) return -1; if (n <= -1) return -1;
r = hawk_rtx_makeintval(rtx, lv); r = hawk_rtx_makeintval_inline(rtx, lv);
if (!r) return -1; if (!r) return -1;
hawk_rtx_setretval(rtx, r); hawk_rtx_setretval(rtx, r);
@@ -2363,7 +2363,7 @@ static HAWK_INLINE int asort_compare_ud (const void* x1, const void* x2, void* c
args[1] = *(hawk_val_t**)x2; args[1] = *(hawk_val_t**)x2;
r = hawk_rtx_callfun(cud->rtx, cud->fun, args, 2); r = hawk_rtx_callfun(cud->rtx, cud->fun, args, 2);
if (HAWK_UNLIKELY(!r)) return -1; if (HAWK_UNLIKELY(!r)) return -1;
if (hawk_rtx_valtoint(cud->rtx, r, &rv) <= -1) return -1; if (hawk_rtx_valtoint_inline(cud->rtx, r, &rv) <= -1) return -1;
*cv = rv; *cv = rv;
return 0; return 0;
} }
@@ -2464,12 +2464,12 @@ val_map:
while (i > 0) while (i > 0)
{ {
--i; --i;
hawk_rtx_refdownval(rtx, va[i]); hawk_rtx_refdownval_inline(rtx, va[i]);
} }
hawk_rtx_freemem(rtx, va); hawk_rtx_freemem(rtx, va);
return -1; return -1;
} }
hawk_rtx_refupval(rtx, va[i]); hawk_rtx_refupval_inline(rtx, va[i]);
i++; i++;
} }
while (hawk_rtx_getnextmapvalitr(rtx, a0_val, &itr)); while (hawk_rtx_getnextmapvalitr(rtx, a0_val, &itr));
@@ -2479,7 +2479,7 @@ val_map:
do do
{ {
va[i] = (hawk_val_t*)HAWK_VAL_MAP_ITR_VAL(&itr); va[i] = (hawk_val_t*)HAWK_VAL_MAP_ITR_VAL(&itr);
hawk_rtx_refupval(rtx, va[i]); hawk_rtx_refupval_inline(rtx, va[i]);
i++; i++;
} }
while (hawk_rtx_getnextmapvalitr(rtx, a0_val, &itr)); while (hawk_rtx_getnextmapvalitr(rtx, a0_val, &itr));
@@ -2499,7 +2499,7 @@ val_map:
if (x <= -1 || !(rrv = hawk_rtx_makemapval(rtx))) if (x <= -1 || !(rrv = hawk_rtx_makemapval(rtx)))
{ {
for (i = 0; i < msz; i++) hawk_rtx_refdownval(rtx, va[i]); for (i = 0; i < msz; i++) hawk_rtx_refdownval_inline(rtx, va[i]);
hawk_rtx_freemem(rtx, va); hawk_rtx_freemem(rtx, va);
return -1; return -1;
} }
@@ -2524,7 +2524,7 @@ val_map:
/* decrement the reference count of the values not added to the map */ /* decrement the reference count of the values not added to the map */
do do
{ {
hawk_rtx_refdownval(rtx, va[i]); hawk_rtx_refdownval_inline(rtx, va[i]);
i++; i++;
} }
while (i < msz); while (i < msz);
@@ -2533,7 +2533,7 @@ val_map:
return -1; return -1;
} }
hawk_rtx_refdownval(rtx, va[i]); /* deref it as it has been added to the map */ hawk_rtx_refdownval_inline(rtx, va[i]); /* deref it as it has been added to the map */
} }
rv = msz; rv = msz;
@@ -2565,8 +2565,8 @@ val_arr:
{ {
if (HAWK_ARR_SLOT(arr, j)) if (HAWK_ARR_SLOT(arr, j))
{ {
va[i] = sort_keys? hawk_rtx_makeintval(rtx, j): HAWK_ARR_DPTR(arr, j); va[i] = sort_keys? hawk_rtx_makeintval_inline(rtx, j): HAWK_ARR_DPTR(arr, j);
hawk_rtx_refupval(rtx, va[i]); hawk_rtx_refupval_inline(rtx, va[i]);
i++; i++;
} }
} }
@@ -2585,7 +2585,7 @@ val_arr:
if (x <= -1 || !(rrv = hawk_rtx_makearrval(rtx, -1))) if (x <= -1 || !(rrv = hawk_rtx_makearrval(rtx, -1)))
{ {
for (i = 0; i < msz; i++) hawk_rtx_refdownval(rtx, va[i]); for (i = 0; i < msz; i++) hawk_rtx_refdownval_inline(rtx, va[i]);
hawk_rtx_freemem(rtx, va); hawk_rtx_freemem(rtx, va);
return -1; return -1;
} }
@@ -2597,7 +2597,7 @@ val_arr:
/* decrement the reference count of the values not added to the map */ /* decrement the reference count of the values not added to the map */
do do
{ {
hawk_rtx_refdownval(rtx, va[i]); hawk_rtx_refdownval_inline(rtx, va[i]);
i++; i++;
} }
while (i < msz); while (i < msz);
@@ -2606,7 +2606,7 @@ val_arr:
return -1; return -1;
} }
hawk_rtx_refdownval(rtx, va[i]); /* deref it as it has been added to the map */ hawk_rtx_refdownval_inline(rtx, va[i]); /* deref it as it has been added to the map */
} }
rv = msz; rv = msz;
@@ -2615,7 +2615,7 @@ val_arr:
} }
done: done:
r = hawk_rtx_makeintval(rtx, rv); r = hawk_rtx_makeintval_inline(rtx, rv);
if (HAWK_UNLIKELY(!r)) return -1; if (HAWK_UNLIKELY(!r)) return -1;
if (rrv) if (rrv)
@@ -2623,9 +2623,9 @@ done:
int x; int x;
/* rrv can be NULL when a jump has been made for an empty source /* rrv can be NULL when a jump has been made for an empty source
* at the beginning of this fucntion */ * at the beginning of this fucntion */
hawk_rtx_refupval(rtx, rrv); hawk_rtx_refupval_inline(rtx, rrv);
x = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, (nargs >= 2)), rrv); x = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, (nargs >= 2)), rrv);
hawk_rtx_refdownval(rtx, rrv); hawk_rtx_refdownval_inline(rtx, rrv);
if (x <= -1) if (x <= -1)
{ {
hawk_rtx_freeval(rtx, r, 0); hawk_rtx_freeval(rtx, r, 0);
+18 -1
View File
@@ -120,13 +120,30 @@
# undef HAWK_HAVE_INLINE # undef HAWK_HAVE_INLINE
#endif #endif
#if defined(__has_attribute) && __has_attribute(always_inline)
# define HAWK_INLINE_ALWAYS __inline__ __attribute__((always_inline))
# define HAWK_HAVE_INLINE_ALWAYS
#endif
#if !defined(HAWK_HAVE_INLINE_ALWAYS)
# if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 0))
# define HAWK_INLINE_ALWAYS __inline__ __attribute__((__always_inline__))
# define HAWK_HAVE_INLINE_ALWAYS
# elif defined(_MSC_VER) || defined(__CC_ARM) || defined(__ARMCC__)
# define HAWK_INLINE_ALWAYS __forceinline
# define HAWK_HAVE_INLINE_ALWAYS
# else
/* fallback to normal inline */
# define HAWK_INLINE_ALWAYS HAWK_INLINE
# endif
#endif
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)) #if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4))
# define HAWK_UNUSED __attribute__((__unused__)) # define HAWK_UNUSED __attribute__((__unused__))
#else #else
# define HAWK_UNUSED # define HAWK_UNUSED
#endif #endif
/* ========================================================================= /* =========================================================================
* STATIC ASSERTION * STATIC ASSERTION
* =========================================================================*/ * =========================================================================*/
+28 -8
View File
@@ -25,6 +25,7 @@
#ifndef _HAWK_PRV_H_ #ifndef _HAWK_PRV_H_
#define _HAWK_PRV_H_ #define _HAWK_PRV_H_
#include <hawk-cmn.h>
#include <hawk-arr.h> #include <hawk-arr.h>
#include <hawk-chr.h> #include <hawk-chr.h>
#include <hawk-ecs.h> #include <hawk-ecs.h>
@@ -38,18 +39,13 @@ typedef struct hawk_chain_t hawk_chain_t;
typedef struct hawk_tree_t hawk_tree_t; typedef struct hawk_tree_t hawk_tree_t;
#include <hawk.h> #include <hawk.h>
#include "tree-prv.h"
#include "fnc-prv.h" /* ------------------------------------------------------------------------ */
#include "parse-prv.h"
#include "run-prv.h"
#include "rio-prv.h"
#include "val-prv.h"
#include "err-prv.h"
#include "misc-prv.h"
#define HAWK_ENABLE_GC #define HAWK_ENABLE_GC
#define HAWK_ENABLE_STR_CACHE #define HAWK_ENABLE_STR_CACHE
#define HAWK_ENABLE_MBS_CACHE #define HAWK_ENABLE_MBS_CACHE
/* [NOTE] the function value support implemented is very limited. /* [NOTE] the function value support implemented is very limited.
* it supports very primitive way to call a function via a variable. * it supports very primitive way to call a function via a variable.
* only user-defined functions are supported. neither builtin functions * only user-defined functions are supported. neither builtin functions
@@ -75,6 +71,18 @@ typedef struct hawk_tree_t hawk_tree_t;
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
/* private headers. some files are affected by feature macros above */
#include "tree-prv.h"
#include "fnc-prv.h"
#include "parse-prv.h"
#include "run-prv.h"
#include "rio-prv.h"
#include "val-prv.h"
#include "err-prv.h"
#include "misc-prv.h"
/* ------------------------------------------------------------------------ */
/* gc configuration */ /* gc configuration */
#define HAWK_GC_NUM_GENS (3) #define HAWK_GC_NUM_GENS (3)
@@ -307,6 +315,9 @@ struct hawk_t
/* named variables */ /* named variables */
hawk_htb_t* named; hawk_htb_t* named;
/* parser-known named variables in slot order */
hawk_arr_t* nameds;
/* global variables */ /* global variables */
hawk_arr_t* gbls; hawk_arr_t* gbls;
@@ -430,6 +441,9 @@ struct hawk_rtx_t
HAWK_RTX_HDR; HAWK_RTX_HDR;
hawk_htb_t* named; hawk_htb_t* named;
hawk_val_t** named_slots;
hawk_oow_t named_slot_count;
hawk_oow_t named_slot_capa;
void** stack; void** stack;
hawk_oow_t stack_top; hawk_oow_t stack_top;
@@ -553,6 +567,10 @@ struct hawk_rtx_t
hawk_ooecs_t fmt; hawk_ooecs_t fmt;
hawk_ooecs_t out; hawk_ooecs_t out;
/* some buffers used by val_flt_to_str() */
hawk_ooecs_t fltfmt;
hawk_ooecs_t fltout;
struct struct
{ {
hawk_ooch_t* ptr; hawk_ooch_t* ptr;
@@ -634,6 +652,7 @@ struct hawk_mod_data_t
#define HAWK_RTX_STACK_LCL(rtx,n) HAWK_RTX_STACK_AT(rtx,3+(hawk_oow_t)HAWK_RTX_STACK_NARGS(rtx)+1+(n)) #define HAWK_RTX_STACK_LCL(rtx,n) HAWK_RTX_STACK_AT(rtx,3+(hawk_oow_t)HAWK_RTX_STACK_NARGS(rtx)+1+(n))
#define HAWK_RTX_STACK_RETVAL(rtx) HAWK_RTX_STACK_AT(rtx,2) #define HAWK_RTX_STACK_RETVAL(rtx) HAWK_RTX_STACK_AT(rtx,2)
#define HAWK_RTX_STACK_GBL(rtx,n) ((rtx)->stack[(n)]) #define HAWK_RTX_STACK_GBL(rtx,n) ((rtx)->stack[(n)])
#define HAWK_RTX_STACK_NAMED(rtx,n) ((rtx)->named_slots[(n)])
#define HAWK_RTX_STACK_RETVAL_GBL(rtx) ((rtx)->stack[(rtx)->hawk->tree.ngbls+2]) #define HAWK_RTX_STACK_RETVAL_GBL(rtx) ((rtx)->stack[(rtx)->hawk->tree.ngbls+2])
#define HAWK_RTX_STACK_AVAIL(rtx) ((rtx)->stack_limit - (rtx)->stack_top) #define HAWK_RTX_STACK_AVAIL(rtx) ((rtx)->stack_limit - (rtx)->stack_top)
@@ -701,6 +720,7 @@ int hawk_init (hawk_t* hawk, hawk_mmgr_t* mmgr, hawk_cmgr_t* cmgr, const hawk_pr
void hawk_fini (hawk_t* hawk); void hawk_fini (hawk_t* hawk);
hawk_rbt_walk_t hawk_modtab_unload_module (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair, void* ctx); hawk_rbt_walk_t hawk_modtab_unload_module (hawk_rbt_t* rbt, hawk_rbt_pair_t* pair, void* ctx);
int hawk_rtx_setnamedval (hawk_rtx_t* rtx, hawk_oow_t id, hawk_val_t* val);
#if defined(__cplusplus) #if defined(__cplusplus)
} }
+40 -6
View File
@@ -33,6 +33,7 @@
#include <hawk-htb.h> /* for rtx->named */ #include <hawk-htb.h> /* for rtx->named */
#define HAWK_MAP_IS_RBT #define HAWK_MAP_IS_RBT
/*#define HAWK_MAP_IS_HTB*/
#include <hawk-map.h> #include <hawk-map.h>
#include <hawk-arr.h> #include <hawk-arr.h>
#include <stdarg.h> #include <stdarg.h>
@@ -1695,6 +1696,21 @@ typedef struct hawk_parsestd_t hawk_parsestd_t;
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
struct hawk_rtx_nv_itr_t
{
/* you can access this */
hawk_oocs_t name;
/* private fields */
hawk_htb_itr_t parse_itr;
hawk_htb_itr_t runtime_itr;
hawk_oow_t slot_id;
int source;
};
typedef struct hawk_rtx_nv_itr_t hawk_rtx_nv_itr_t;
/* ----------------------------------------------------------------------- */
#if defined(__cplusplus) #if defined(__cplusplus)
extern "C" { extern "C" {
#endif #endif
@@ -2893,7 +2909,7 @@ HAWK_EXPORT hawk_val_t* hawk_rtx_getarg (
/** /**
* The hawk_rtx_getsubsep() function returns the * The hawk_rtx_getsubsep() function returns the
* pointer to the internal value of SUBSEP. It's a specialized * pointer to the internal value of SUBSEP. It's a specialized
* version of hawk_rtx_getgbl (rtx, HAWK_GBL_SUBSEP). * version of hawk_rtx_getgbl(rtx, HAWK_GBL_SUBSEP).
*/ */
HAWK_EXPORT const hawk_oocs_t* hawk_rtx_getsubsep ( HAWK_EXPORT const hawk_oocs_t* hawk_rtx_getsubsep (
hawk_rtx_t* rtx /**< runtime context */ hawk_rtx_t* rtx /**< runtime context */
@@ -2994,13 +3010,31 @@ HAWK_EXPORT int hawk_rtx_setscriptnamewithbchars (
# define hawk_rtx_setscriptnamewithoochars hawk_rtx_setscriptnamewithbchars # define hawk_rtx_setscriptnamewithoochars hawk_rtx_setscriptnamewithbchars
#endif #endif
/** HAWK_EXPORT void hawk_init_rtx_nv_itr (
* The hawk_rtx_getnvmap() gets the map of named variables hawk_rtx_nv_itr_t* itr
*/
HAWK_EXPORT hawk_htb_t* hawk_rtx_getnvmap (
hawk_rtx_t* rtx /**< runtime context */
); );
HAWK_EXPORT hawk_val_t* hawk_rtx_getfirstnv (
hawk_rtx_t* rtx,
hawk_rtx_nv_itr_t* itr
);
HAWK_EXPORT hawk_val_t* hawk_rtx_getnextnv (
hawk_rtx_t* rtx,
hawk_rtx_nv_itr_t* itr
);
HAWK_EXPORT hawk_val_t* hawk_rtx_findnvbyucstr (
hawk_rtx_t* rtx,
const hawk_uch_t* name
);
HAWK_EXPORT hawk_val_t* hawk_rtx_findnvbybcstr (
hawk_rtx_t* rtx,
const hawk_bch_t* name
);
/** /**
* The hawk_rtx_geterrnum() function gets the number of the last error * The hawk_rtx_geterrnum() function gets the number of the last error
* occurred during runtime. * occurred during runtime.
+18 -18
View File
@@ -91,7 +91,7 @@ static hawk_oow_t push_args_from_stack (hawk_rtx_t* rtx, const hawk_loc_t* call_
} }
HAWK_RTX_STACK_PUSH(rtx, v); HAWK_RTX_STACK_PUSH(rtx, v);
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
} }
return pasf->end_index - pasf->start_index + 1; return pasf->end_index - pasf->start_index + 1;
@@ -228,7 +228,7 @@ static int fnc_function_exists (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_rtx_freevaloocstr(rtx, a0, name.ptr); hawk_rtx_freevaloocstr(rtx, a0, name.ptr);
} }
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, rx));
return 0; return 0;
} }
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
@@ -252,7 +252,7 @@ static int fnc_cmgr_exists (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_rtx_freevaloocstr(rtx, a0, str); hawk_rtx_freevaloocstr(rtx, a0, str);
} }
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, rx)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, rx));
return 0; return 0;
} }
@@ -270,12 +270,12 @@ static int fnc_gc (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t gen = -1; hawk_int_t gen = -1;
#if defined(HAWK_ENABLE_GC) #if defined(HAWK_ENABLE_GC)
if (hawk_rtx_getnargs(rtx) >= 1 && hawk_rtx_valtoint(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = -1; if (hawk_rtx_getnargs(rtx) >= 1 && hawk_rtx_valtoint_inline(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = -1;
gen = hawk_rtx_gc(rtx, gen); gen = hawk_rtx_gc(rtx, gen);
#endif #endif
HAWK_ASSERT(HAWK_IN_INT_RANGE(gen)); HAWK_ASSERT(HAWK_IN_INT_RANGE(gen));
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, gen)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, gen));
return 0; return 0;
} }
@@ -284,14 +284,14 @@ static int fnc_gc_get_pressure (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t gen; hawk_int_t gen;
hawk_int_t pressure; hawk_int_t pressure;
if (hawk_rtx_valtoint(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = 0; if (hawk_rtx_valtoint_inline(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = 0;
if (gen < 0) gen = 0; if (gen < 0) gen = 0;
else if (gen >= HAWK_COUNTOF(rtx->gc.g)) gen = HAWK_COUNTOF(rtx->gc.g) - 1; else if (gen >= HAWK_COUNTOF(rtx->gc.g)) gen = HAWK_COUNTOF(rtx->gc.g) - 1;
pressure = rtx->gc.pressure[gen]; pressure = rtx->gc.pressure[gen];
HAWK_ASSERT(HAWK_IN_INT_RANGE(pressure)); HAWK_ASSERT(HAWK_IN_INT_RANGE(pressure));
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, pressure)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, pressure));
return 0; return 0;
} }
@@ -300,14 +300,14 @@ static int fnc_gc_get_threshold (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t gen; hawk_int_t gen;
hawk_int_t threshold; hawk_int_t threshold;
if (hawk_rtx_valtoint(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = 0; if (hawk_rtx_valtoint_inline(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = 0;
if (gen < 0) gen = 0; if (gen < 0) gen = 0;
else if (gen >= HAWK_COUNTOF(rtx->gc.g)) gen = HAWK_COUNTOF(rtx->gc.g) - 1; else if (gen >= HAWK_COUNTOF(rtx->gc.g)) gen = HAWK_COUNTOF(rtx->gc.g) - 1;
threshold = rtx->gc.threshold[gen]; threshold = rtx->gc.threshold[gen];
HAWK_ASSERT(HAWK_IN_INT_RANGE(threshold)); HAWK_ASSERT(HAWK_IN_INT_RANGE(threshold));
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, threshold)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, threshold));
return 0; return 0;
} }
@@ -316,11 +316,11 @@ static int fnc_gc_set_threshold (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t gen; hawk_int_t gen;
hawk_int_t threshold; hawk_int_t threshold;
if (hawk_rtx_valtoint(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = 0; if (hawk_rtx_valtoint_inline(rtx, hawk_rtx_getarg(rtx, 0), &gen) <= -1) gen = 0;
if (gen < 0) gen = 0; if (gen < 0) gen = 0;
else if (gen >= HAWK_COUNTOF(rtx->gc.g)) gen = HAWK_COUNTOF(rtx->gc.g) - 1; else if (gen >= HAWK_COUNTOF(rtx->gc.g)) gen = HAWK_COUNTOF(rtx->gc.g) - 1;
if (hawk_rtx_valtoint(rtx, hawk_rtx_getarg(rtx, 1), &threshold) <= -1) threshold = -1; if (hawk_rtx_valtoint_inline(rtx, hawk_rtx_getarg(rtx, 1), &threshold) <= -1) threshold = -1;
if (threshold >= 0) if (threshold >= 0)
{ {
@@ -333,7 +333,7 @@ static int fnc_gc_set_threshold (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
} }
HAWK_ASSERT(HAWK_IN_INT_RANGE(threshold)); HAWK_ASSERT(HAWK_IN_INT_RANGE(threshold));
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, threshold)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, threshold));
return 0; return 0;
} }
@@ -341,7 +341,7 @@ static int fnc_gcrefs (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
{ {
hawk_val_t* a0; hawk_val_t* a0;
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, HAWK_VTR_IS_POINTER(a0)? a0->v_refs: 0)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, HAWK_VTR_IS_POINTER(a0)? a0->v_refs: 0));
return 0; return 0;
} }
@@ -439,7 +439,7 @@ static int fnc_isnil (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
r = hawk_rtx_makeintval(rtx, HAWK_RTX_GETVALTYPE(rtx, a0) == HAWK_VAL_NIL); r = hawk_rtx_makeintval_inline(rtx, HAWK_RTX_GETVALTYPE(rtx, a0) == HAWK_VAL_NIL);
if (HAWK_UNLIKELY(!r)) return -1; if (HAWK_UNLIKELY(!r)) return -1;
hawk_rtx_setretval(rtx, r); hawk_rtx_setretval(rtx, r);
@@ -453,7 +453,7 @@ static int fnc_ismap (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
r = hawk_rtx_makeintval(rtx, HAWK_RTX_GETVALTYPE(rtx, a0) == HAWK_VAL_MAP); r = hawk_rtx_makeintval_inline(rtx, HAWK_RTX_GETVALTYPE(rtx, a0) == HAWK_VAL_MAP);
if (HAWK_UNLIKELY(!r)) return -1; if (HAWK_UNLIKELY(!r)) return -1;
hawk_rtx_setretval(rtx, r); hawk_rtx_setretval(rtx, r);
@@ -467,7 +467,7 @@ static int fnc_isarr (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
r = hawk_rtx_makeintval(rtx, HAWK_RTX_GETVALTYPE(rtx, a0) == HAWK_VAL_ARR); r = hawk_rtx_makeintval_inline(rtx, HAWK_RTX_GETVALTYPE(rtx, a0) == HAWK_VAL_ARR);
if (HAWK_UNLIKELY(!r)) return -1; if (HAWK_UNLIKELY(!r)) return -1;
hawk_rtx_setretval(rtx, r); hawk_rtx_setretval(rtx, r);
@@ -495,7 +495,7 @@ static int fnc_type (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
_type = hawk_rtx_getvaltype(rtx, a0); _type = hawk_rtx_getvaltype(rtx, a0);
r = hawk_rtx_makeintval(rtx, _type); r = hawk_rtx_makeintval_inline(rtx, _type);
if (HAWK_UNLIKELY(!r)) return -1; if (HAWK_UNLIKELY(!r)) return -1;
hawk_rtx_setretval(rtx, r); hawk_rtx_setretval(rtx, r);
@@ -528,7 +528,7 @@ static int fnc_hash (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
v = hawk_rtx_hashval(rtx, a0); /* ignore v <= -1 which is an error */ v = hawk_rtx_hashval(rtx, a0); /* ignore v <= -1 which is an error */
hawk_rtx_setretval(rtx, hawk_rtx_makeintval(rtx, v)); hawk_rtx_setretval(rtx, hawk_rtx_makeintval_inline(rtx, v));
return 0; return 0;
} }
+2 -2
View File
@@ -603,7 +603,7 @@ static int fnc_srand (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
else else
{ {
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
n = hawk_rtx_valtoint(rtx, a0, &lv); n = hawk_rtx_valtoint_inline(rtx, a0, &lv);
if (n <= -1) return -1; if (n <= -1) return -1;
#if defined(HAVE_INITSTATE_R) && defined(HAVE_SRANDOM_R) && defined(HAVE_RANDOM_R) #if defined(HAVE_INITSTATE_R) && defined(HAVE_SRANDOM_R) && defined(HAVE_RANDOM_R)
srandom_r (lv, &modctx->prand); srandom_r (lv, &modctx->prand);
@@ -614,7 +614,7 @@ static int fnc_srand (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
#endif #endif
} }
r = hawk_rtx_makeintval(rtx, prev); r = hawk_rtx_makeintval_inline(rtx, prev);
if (r == HAWK_NULL) return -1; if (r == HAWK_NULL) return -1;
hawk_rtx_setretval(rtx, r); hawk_rtx_setretval(rtx, r);
+15 -15
View File
@@ -130,7 +130,7 @@ static int fnc_trim (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
if (hawk_rtx_getnargs(rtx) >= 2) if (hawk_rtx_getnargs(rtx) >= 2)
{ {
hawk_int_t iv; hawk_int_t iv;
if (hawk_rtx_valtoint(rtx, hawk_rtx_getarg(rtx, 1), &iv) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, hawk_rtx_getarg(rtx, 1), &iv) <= -1) return -1;
if (iv & TRIM_FLAG_PAC_SPACES) return fnc_normspace(rtx, fi); if (iv & TRIM_FLAG_PAC_SPACES) return fnc_normspace(rtx, fi);
} }
@@ -212,7 +212,7 @@ static int is_class (hawk_rtx_t* rtx, hawk_ooch_prop_t ctype)
} }
} }
a0 = hawk_rtx_makeintval(rtx, tmp); a0 = hawk_rtx_makeintval_inline(rtx, tmp);
if (HAWK_UNLIKELY(!a0)) return -1; if (HAWK_UNLIKELY(!a0)) return -1;
hawk_rtx_setretval(rtx, a0); hawk_rtx_setretval(rtx, a0);
@@ -298,7 +298,7 @@ static int fnc_frombcharcode (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t cc; hawk_int_t cc;
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
if (hawk_rtx_valtoint(rtx, a0, &cc) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a0, &cc) <= -1) return -1;
retv = hawk_rtx_makebchrval(rtx, (hawk_bch_t)cc); retv = hawk_rtx_makebchrval(rtx, (hawk_bch_t)cc);
if (HAWK_UNLIKELY(!retv)) return -1; if (HAWK_UNLIKELY(!retv)) return -1;
@@ -316,7 +316,7 @@ static int fnc_frombcharcode (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t cc; hawk_int_t cc;
a0 = hawk_rtx_getarg(rtx, i); a0 = hawk_rtx_getarg(rtx, i);
if (hawk_rtx_valtoint(rtx, a0, &cc) <= -1) if (hawk_rtx_valtoint_inline(rtx, a0, &cc) <= -1)
{ {
hawk_rtx_freeval(rtx, retv, 0); hawk_rtx_freeval(rtx, retv, 0);
return -1; return -1;
@@ -349,7 +349,7 @@ static int fnc_fromcharcode (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t cc; hawk_int_t cc;
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
if (hawk_rtx_valtoint(rtx, a0, &cc) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a0, &cc) <= -1) return -1;
retv = hawk_rtx_makecharval(rtx, (hawk_ooch_t)cc); retv = hawk_rtx_makecharval(rtx, (hawk_ooch_t)cc);
if (HAWK_UNLIKELY(!retv)) return -1; if (HAWK_UNLIKELY(!retv)) return -1;
@@ -367,7 +367,7 @@ static int fnc_fromcharcode (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t cc; hawk_int_t cc;
a0 = hawk_rtx_getarg(rtx, i); a0 = hawk_rtx_getarg(rtx, i);
if (hawk_rtx_valtoint(rtx, a0, &cc) <= -1) if (hawk_rtx_valtoint_inline(rtx, a0, &cc) <= -1)
{ {
hawk_rtx_freeval(rtx, retv, 0); hawk_rtx_freeval(rtx, retv, 0);
return -1; return -1;
@@ -396,7 +396,7 @@ static int fnc_tocharcode (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
/* optional index. must be between 1 and the string length inclusive */ /* optional index. must be between 1 and the string length inclusive */
hawk_val_t* a1; hawk_val_t* a1;
a1 = hawk_rtx_getarg(rtx, 1); a1 = hawk_rtx_getarg(rtx, 1);
if (hawk_rtx_valtoint(rtx, a1, &pos) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a1, &pos) <= -1) return -1;
pos--; /* 1 based indexing. range check to be done before accessing below */ pos--; /* 1 based indexing. range check to be done before accessing below */
} }
@@ -443,7 +443,7 @@ static int fnc_tocharcode (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
if (iv >= 0) if (iv >= 0)
{ {
retv = hawk_rtx_makeintval(rtx, iv); retv = hawk_rtx_makeintval_inline(rtx, iv);
if (HAWK_UNLIKELY(!retv)) return -1; if (HAWK_UNLIKELY(!retv)) return -1;
hawk_rtx_setretval(rtx, retv); hawk_rtx_setretval(rtx, retv);
} }
@@ -991,7 +991,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t base; hawk_int_t base;
hawk_bch_t tmp = HAWK_RTX_GETBCHRFROMVAL(rtx, a0); hawk_bch_t tmp = HAWK_RTX_GETBCHRFROMVAL(rtx, a0);
if (hawk_rtx_valtoint(rtx, a1, &base) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a1, &base) <= -1) return -1;
rx = hawk_bchars_to_num( rx = hawk_bchars_to_num(
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base), HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base),
&tmp, 1, &lv, &rv &tmp, 1, &lv, &rv
@@ -1007,7 +1007,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_val_t* a1 = hawk_rtx_getarg(rtx, 1); hawk_val_t* a1 = hawk_rtx_getarg(rtx, 1);
hawk_int_t base; hawk_int_t base;
if (hawk_rtx_valtoint(rtx, a1, &base) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a1, &base) <= -1) return -1;
rx = hawk_bchars_to_num( rx = hawk_bchars_to_num(
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base), HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base),
((hawk_val_mbs_t*)a0)->val.ptr, ((hawk_val_mbs_t*)a0)->val.ptr,
@@ -1025,7 +1025,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_int_t base; hawk_int_t base;
hawk_ooch_t tmp = HAWK_RTX_GETCHARFROMVAL(rtx, a0); hawk_ooch_t tmp = HAWK_RTX_GETCHARFROMVAL(rtx, a0);
if (hawk_rtx_valtoint(rtx, a1, &base) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a1, &base) <= -1) return -1;
rx = hawk_oochars_to_num( rx = hawk_oochars_to_num(
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base), HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base),
&tmp, 1, &lv, &rv &tmp, 1, &lv, &rv
@@ -1040,7 +1040,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
hawk_val_t* a1 = hawk_rtx_getarg(rtx, 1); hawk_val_t* a1 = hawk_rtx_getarg(rtx, 1);
hawk_int_t base; hawk_int_t base;
if (hawk_rtx_valtoint(rtx, a1, &base) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, a1, &base) <= -1) return -1;
rx = hawk_oochars_to_num( rx = hawk_oochars_to_num(
HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base), HAWK_OOCHARS_TO_NUM_MAKE_OPTION(0, 0, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), base),
((hawk_val_str_t*)a0)->val.ptr, ((hawk_val_str_t*)a0)->val.ptr,
@@ -1062,7 +1062,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
if (rx == 0) if (rx == 0)
{ {
retv = hawk_rtx_makeintval(rtx, lv); retv = hawk_rtx_makeintval_inline(rtx, lv);
} }
else if (rx >= 1) else if (rx >= 1)
{ {
@@ -1070,7 +1070,7 @@ static int fnc_tonum (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
} }
else else
{ {
retv = hawk_rtx_makeintval(rtx, 0); retv = hawk_rtx_makeintval_inline(rtx, 0);
} }
if (!retv) return -1; if (!retv) return -1;
@@ -1088,7 +1088,7 @@ static int fnc_subchar (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
a0 = hawk_rtx_getarg(rtx, 0); a0 = hawk_rtx_getarg(rtx, 0);
a1 = hawk_rtx_getarg(rtx, 1); a1 = hawk_rtx_getarg(rtx, 1);
n = hawk_rtx_valtoint(rtx, a1, &lindex); n = hawk_rtx_valtoint_inline(rtx, a1, &lindex);
if (n <= -1) return -1; if (n <= -1) return -1;
lindex = lindex - 1; lindex = lindex - 1;
+204 -204
View File
File diff suppressed because it is too large Load Diff
+31 -4
View File
@@ -771,7 +771,6 @@ hawk_ooch_t* hawk_addsionamewithbchars (hawk_t* hawk, const hawk_bch_t* ptr, haw
ucslen = ucslen + 1; ucslen = ucslen + 1;
hawk_convbtouchars(hawk, ptr, &bcslen, (hawk_uch_t*)(link + 1), &ucslen, 0); hawk_convbtouchars(hawk, ptr, &bcslen, (hawk_uch_t*)(link + 1), &ucslen, 0);
((hawk_uch_t*)(link + 1))[ucslen] = '\0'; ((hawk_uch_t*)(link + 1))[ucslen] = '\0';
#endif #endif
link->link = hawk->sio_names; link->link = hawk->sio_names;
@@ -2472,6 +2471,26 @@ static hawk_oow_t get_global (hawk_t* hawk, const hawk_oocs_t* name)
return HAWK_ARR_NIL; return HAWK_ARR_NIL;
} }
static hawk_oow_t get_or_add_named (hawk_t* hawk, const hawk_oocs_t* name)
{
hawk_htb_pair_t* pair;
hawk_oow_t idx;
pair = hawk_htb_search(hawk->parse.named, name->ptr, name->len);
if (pair)
{
idx = (hawk_oow_t)HAWK_HTB_VPTR(pair);
return idx;
}
idx = HAWK_HTB_SIZE(hawk->parse.named);
pair = hawk_htb_upsert(hawk->parse.named, name->ptr, name->len, (void*)idx, 0);
if (!pair) return (hawk_oow_t)-1;
return idx;
}
static hawk_oow_t find_global (hawk_t* hawk, const hawk_oocs_t* name) static hawk_oow_t find_global (hawk_t* hawk, const hawk_oocs_t* name)
{ {
hawk_oow_t i; hawk_oow_t i;
@@ -7312,9 +7331,12 @@ static hawk_nde_t* parse_primary_ident_noseg (hawk_t* hawk, const hawk_loc_t* xl
if (HAWK_UNLIKELY(!tmp)) ADJERR_LOC(hawk, xloc); if (HAWK_UNLIKELY(!tmp)) ADJERR_LOC(hawk, xloc);
else else
{ {
hawk_oow_t named_idxa;
/* collect unique instances of a named variable /* collect unique instances of a named variable
* for reference */ * for reference */
if (hawk_htb_upsert(hawk->parse.named, name->ptr, name->len, HAWK_NULL, 0) == HAWK_NULL) named_idxa = get_or_add_named(hawk, name);
if (named_idxa == (hawk_oow_t)-1)
{ {
ADJERR_LOC(hawk, xloc); ADJERR_LOC(hawk, xloc);
hawk_freemem(hawk, tmp); hawk_freemem(hawk, tmp);
@@ -7325,7 +7347,7 @@ static hawk_nde_t* parse_primary_ident_noseg (hawk_t* hawk, const hawk_loc_t* xl
tmp->loc = *xloc; tmp->loc = *xloc;
tmp->id.name.ptr = name->ptr; tmp->id.name.ptr = name->ptr;
tmp->id.name.len = name->len; tmp->id.name.len = name->len;
tmp->id.idxa = (hawk_oow_t)-1; tmp->id.idxa = named_idxa;
tmp->idx = HAWK_NULL; tmp->idx = HAWK_NULL;
nde = (hawk_nde_t*)tmp; nde = (hawk_nde_t*)tmp;
@@ -7774,7 +7796,12 @@ static hawk_nde_t* make_hashidx_access_node (hawk_t* hawk, const hawk_oocs_t* na
nde->loc = *xloc; nde->loc = *xloc;
nde->id.name.ptr = name->ptr; nde->id.name.ptr = name->ptr;
nde->id.name.len = name->len; nde->id.name.len = name->len;
nde->id.idxa = (hawk_oow_t)-1; nde->id.idxa = get_or_add_named(hawk, name);
if (nde->id.idxa == (hawk_oow_t)-1)
{
ADJERR_LOC(hawk, xloc);
goto exit_func;
}
nde->idx = idx; nde->idx = idx;
return (hawk_nde_t*)nde; return (hawk_nde_t*)nde;
+2 -2
View File
@@ -1046,7 +1046,7 @@ void hawk_rbt_walk (hawk_rbt_t* rbt, walker_t walker, void* ctx)
hawk_rbt_itr_t itr; hawk_rbt_itr_t itr;
hawk_rbt_pair_t* pair; hawk_rbt_pair_t* pair;
hawk_init_map_itr (&itr, 0); hawk_init_rbt_itr(&itr, 0);
pair = hawk_rbt_getfirstpair(rbt, &itr); pair = hawk_rbt_getfirstpair(rbt, &itr);
while (pair) while (pair)
{ {
@@ -1060,7 +1060,7 @@ void hawk_rbt_rwalk (hawk_rbt_t* rbt, walker_t walker, void* ctx)
hawk_rbt_itr_t itr; hawk_rbt_itr_t itr;
hawk_rbt_pair_t* pair; hawk_rbt_pair_t* pair;
hawk_init_map_itr (&itr, 1); hawk_init_rbt_itr(&itr, 1);
pair = hawk_rbt_getfirstpair(rbt, &itr); pair = hawk_rbt_getfirstpair(rbt, &itr);
while (pair) while (pair)
{ {
+26 -26
View File
@@ -60,9 +60,9 @@ int hawk_rtx_setrec (hawk_rtx_t* rtx, hawk_oow_t idx, const hawk_oocs_t* str, in
if (HAWK_UNLIKELY(!v)) goto oops; if (HAWK_UNLIKELY(!v)) goto oops;
} }
if (HAWK_RTX_GETVALTYPE(rtx, rtx->inrec.d0) != HAWK_VAL_NIL) hawk_rtx_refdownval(rtx, rtx->inrec.d0); if (HAWK_RTX_GETVALTYPE(rtx, rtx->inrec.d0) != HAWK_VAL_NIL) hawk_rtx_refdownval_inline(rtx, rtx->inrec.d0);
rtx->inrec.d0 = v; rtx->inrec.d0 = v;
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
return 0; return 0;
@@ -313,7 +313,7 @@ static int split_record (hawk_rtx_t* rtx, int prefer_number)
return -1; return -1;
} }
hawk_rtx_refupval(rtx, rtx->inrec.flds[rtx->inrec.nflds].val); hawk_rtx_refupval_inline(rtx, rtx->inrec.flds[rtx->inrec.nflds].val);
rtx->inrec.nflds++; rtx->inrec.nflds++;
len = HAWK_OOECS_LEN(&rtx->inrec.line) - (p - px); len = HAWK_OOECS_LEN(&rtx->inrec.line) - (p - px);
@@ -322,16 +322,16 @@ static int split_record (hawk_rtx_t* rtx, int prefer_number)
if (fs_free) hawk_rtx_freemem(rtx, fs_free); if (fs_free) hawk_rtx_freemem(rtx, fs_free);
/* set the number of fields */ /* set the number of fields */
v = hawk_rtx_makeintval(rtx, (hawk_int_t)rtx->inrec.nflds); v = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)rtx->inrec.nflds);
if (v == HAWK_NULL) return -1; if (v == HAWK_NULL) return -1;
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
if (hawk_rtx_setgbl(rtx, HAWK_GBL_NF, v) <= -1) if (hawk_rtx_setgbl(rtx, HAWK_GBL_NF, v) <= -1)
{ {
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
return -1; return -1;
} }
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
return 0; return 0;
} }
@@ -342,7 +342,7 @@ int hawk_rtx_clrrec (hawk_rtx_t* rtx, int skip_inrec_line)
if (HAWK_RTX_GETVALTYPE(rtx, rtx->inrec.d0) != HAWK_VAL_NIL) if (HAWK_RTX_GETVALTYPE(rtx, rtx->inrec.d0) != HAWK_VAL_NIL)
{ {
hawk_rtx_refdownval(rtx, rtx->inrec.d0); hawk_rtx_refdownval_inline(rtx, rtx->inrec.d0);
rtx->inrec.d0 = hawk_val_nil; rtx->inrec.d0 = hawk_val_nil;
} }
@@ -353,7 +353,7 @@ int hawk_rtx_clrrec (hawk_rtx_t* rtx, int skip_inrec_line)
for (i = 0; i < rtx->inrec.nflds; i++) for (i = 0; i < rtx->inrec.nflds; i++)
{ {
HAWK_ASSERT(rtx->inrec.flds[i].val != HAWK_NULL); HAWK_ASSERT(rtx->inrec.flds[i].val != HAWK_NULL);
hawk_rtx_refdownval(rtx, rtx->inrec.flds[i].val); hawk_rtx_refdownval_inline(rtx, rtx->inrec.flds[i].val);
} }
rtx->inrec.nflds = 0; rtx->inrec.nflds = 0;
@@ -430,11 +430,11 @@ static int recomp_record_fields (hawk_rtx_t* rtx, hawk_oow_t lv, const hawk_oocs
hawk_rtx_makestrvalwithoochars(rtx, str->ptr, str->len); hawk_rtx_makestrvalwithoochars(rtx, str->ptr, str->len);
if (HAWK_UNLIKELY(!tmp)) return -1; if (HAWK_UNLIKELY(!tmp)) return -1;
if (i < nflds) hawk_rtx_refdownval(rtx, rtx->inrec.flds[i].val); if (i < nflds) hawk_rtx_refdownval_inline(rtx, rtx->inrec.flds[i].val);
else rtx->inrec.nflds++; else rtx->inrec.nflds++;
rtx->inrec.flds[i].val = tmp; rtx->inrec.flds[i].val = tmp;
hawk_rtx_refupval(rtx, tmp); hawk_rtx_refupval_inline(rtx, tmp);
} }
else if (i >= nflds) else if (i >= nflds)
{ {
@@ -443,12 +443,12 @@ static int recomp_record_fields (hawk_rtx_t* rtx, hawk_oow_t lv, const hawk_oocs
if (hawk_ooecs_cat(&rtx->inrec.line, HAWK_T("")) == (hawk_oow_t)-1) return -1; if (hawk_ooecs_cat(&rtx->inrec.line, HAWK_T("")) == (hawk_oow_t)-1) return -1;
/* hawk_rtx_refdownval should not be called over /* hawk_rtx_refdownval_inline should not be called over
* rtx->inrec.flds[i].val as it is not initialized * rtx->inrec.flds[i].val as it is not initialized
* to any valid values */ * to any valid values */
/*hawk_rtx_refdownval(rtx, rtx->inrec.flds[i].val);*/ /*hawk_rtx_refdownval_inline(rtx, rtx->inrec.flds[i].val);*/
rtx->inrec.flds[i].val = hawk_val_zls; rtx->inrec.flds[i].val = hawk_val_zls;
hawk_rtx_refupval(rtx, hawk_val_zls); hawk_rtx_refupval_inline(rtx, hawk_val_zls);
rtx->inrec.nflds++; rtx->inrec.nflds++;
} }
else else
@@ -471,16 +471,16 @@ static int recomp_record_fields (hawk_rtx_t* rtx, hawk_oow_t lv, const hawk_oocs
if (HAWK_RTX_GETINTFROMVAL(rtx, v) != max) if (HAWK_RTX_GETINTFROMVAL(rtx, v) != max)
{ {
v = hawk_rtx_makeintval(rtx, (hawk_int_t)max); v = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)max);
if (v == HAWK_NULL) return -1; if (v == HAWK_NULL) return -1;
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
if (hawk_rtx_setgbl(rtx, HAWK_GBL_NF, v) <= -1) if (hawk_rtx_setgbl(rtx, HAWK_GBL_NF, v) <= -1)
{ {
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
return -1; return -1;
} }
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
} }
return 0; return 0;
@@ -505,7 +505,7 @@ int hawk_rtx_truncrec (hawk_rtx_t* rtx, hawk_oow_t nflds)
if (nflds > 1) if (nflds > 1)
{ {
v = HAWK_RTX_STACK_GBL(rtx, HAWK_GBL_OFS); v = HAWK_RTX_STACK_GBL(rtx, HAWK_GBL_OFS);
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
vtype = HAWK_RTX_GETVALTYPE(rtx, v); vtype = HAWK_RTX_GETVALTYPE(rtx, v);
if (vtype == HAWK_VAL_NIL) if (vtype == HAWK_VAL_NIL)
@@ -532,7 +532,7 @@ int hawk_rtx_truncrec (hawk_rtx_t* rtx, hawk_oow_t nflds)
if (v) if (v)
{ {
if (ofs_free) hawk_rtx_freevaloocstr(rtx, v, ofs_free); if (ofs_free) hawk_rtx_freevaloocstr(rtx, v, ofs_free);
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
v = HAWK_NULL; v = HAWK_NULL;
} }
} }
@@ -540,17 +540,17 @@ int hawk_rtx_truncrec (hawk_rtx_t* rtx, hawk_oow_t nflds)
w = (hawk_val_t*)hawk_rtx_makestrvalwithoocs(rtx, HAWK_OOECS_OOCS(&tmp)); w = (hawk_val_t*)hawk_rtx_makestrvalwithoocs(rtx, HAWK_OOECS_OOCS(&tmp));
if (HAWK_UNLIKELY(!w)) goto oops; if (HAWK_UNLIKELY(!w)) goto oops;
hawk_rtx_refdownval(rtx, rtx->inrec.d0); hawk_rtx_refdownval_inline(rtx, rtx->inrec.d0);
rtx->inrec.d0 = w; rtx->inrec.d0 = w;
hawk_rtx_refupval(rtx, rtx->inrec.d0); hawk_rtx_refupval_inline(rtx, rtx->inrec.d0);
hawk_ooecs_swap (&tmp, &rtx->inrec.line); hawk_ooecs_swap(&tmp, &rtx->inrec.line);
hawk_ooecs_fini (&tmp); hawk_ooecs_fini(&tmp);
fini_tmp = 0; fini_tmp = 0;
for (i = nflds; i < rtx->inrec.nflds; i++) for (i = nflds; i < rtx->inrec.nflds; i++)
{ {
hawk_rtx_refdownval(rtx, rtx->inrec.flds[i].val); hawk_rtx_refdownval_inline(rtx, rtx->inrec.flds[i].val);
} }
rtx->inrec.nflds = nflds; rtx->inrec.nflds = nflds;
@@ -561,7 +561,7 @@ oops:
if (v) if (v)
{ {
if (ofs_free) hawk_rtx_freevaloocstr(rtx, v, ofs_free); if (ofs_free) hawk_rtx_freevaloocstr(rtx, v, ofs_free);
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
} }
return -1; return -1;
} }
+14 -14
View File
@@ -399,21 +399,21 @@ int hawk_rtx_readio (hawk_rtx_t* rtx, hawk_in_type_t in_type, const hawk_ooch_t*
/* get the record separator */ /* get the record separator */
rs = hawk_rtx_getgbl(rtx, HAWK_GBL_RS); rs = hawk_rtx_getgbl(rtx, HAWK_GBL_RS);
hawk_rtx_refupval(rtx, rs); hawk_rtx_refupval_inline(rtx, rs);
fs = hawk_rtx_getgbl(rtx, HAWK_GBL_FS); fs = hawk_rtx_getgbl(rtx, HAWK_GBL_FS);
hawk_rtx_refupval(rtx, fs); hawk_rtx_refupval_inline(rtx, fs);
if (resolve_rs(rtx, rs, &rrs) <= -1) /* TODO: resolve it upon assignment for optimization? */ if (resolve_rs(rtx, rs, &rrs) <= -1) /* TODO: resolve it upon assignment for optimization? */
{ {
hawk_rtx_refdownval(rtx, rs); hawk_rtx_refdownval_inline(rtx, rs);
return -1; return -1;
} }
if (resolve_rs(rtx, fs, &ffs) <= -1) if (resolve_rs(rtx, fs, &ffs) <= -1)
{ {
hawk_rtx_refdownval(rtx, fs); hawk_rtx_refdownval_inline(rtx, fs);
hawk_rtx_refdownval(rtx, rs); hawk_rtx_refdownval_inline(rtx, rs);
return -1; return -1;
} }
@@ -749,8 +749,8 @@ int hawk_rtx_readio (hawk_rtx_t* rtx, hawk_in_type_t in_type, const hawk_ooch_t*
} }
if (rrs.ptr && HAWK_RTX_GETVALTYPE(rtx, rs) != HAWK_VAL_STR) hawk_rtx_freemem(rtx, rrs.ptr); if (rrs.ptr && HAWK_RTX_GETVALTYPE(rtx, rs) != HAWK_VAL_STR) hawk_rtx_freemem(rtx, rrs.ptr);
hawk_rtx_refdownval(rtx, fs); hawk_rtx_refdownval_inline(rtx, fs);
hawk_rtx_refdownval(rtx, rs); hawk_rtx_refdownval_inline(rtx, rs);
return ret; return ret;
} }
@@ -789,21 +789,21 @@ int hawk_rtx_readiobytes (hawk_rtx_t* rtx, hawk_in_type_t in_type, const hawk_oo
/* get the record separator */ /* get the record separator */
brs = hawk_rtx_getgbl(rtx, HAWK_GBL_RS); brs = hawk_rtx_getgbl(rtx, HAWK_GBL_RS);
hawk_rtx_refupval(rtx, brs); hawk_rtx_refupval_inline(rtx, brs);
bfs = hawk_rtx_getgbl(rtx, HAWK_GBL_FS); bfs = hawk_rtx_getgbl(rtx, HAWK_GBL_FS);
hawk_rtx_refupval(rtx, bfs); hawk_rtx_refupval_inline(rtx, bfs);
if (resolve_brs(rtx, brs, &rrs) <= -1) if (resolve_brs(rtx, brs, &rrs) <= -1)
{ {
hawk_rtx_refdownval(rtx, brs); hawk_rtx_refdownval_inline(rtx, brs);
return -1; return -1;
} }
if (resolve_brs(rtx, bfs, &ffs) <= -1) if (resolve_brs(rtx, bfs, &ffs) <= -1)
{ {
hawk_rtx_refdownval(rtx, bfs); hawk_rtx_refdownval_inline(rtx, bfs);
hawk_rtx_refdownval(rtx, brs); hawk_rtx_refdownval_inline(rtx, brs);
return -1; return -1;
} }
@@ -1131,8 +1131,8 @@ int hawk_rtx_readiobytes (hawk_rtx_t* rtx, hawk_in_type_t in_type, const hawk_oo
} }
if (rrs.ptr && HAWK_RTX_GETVALTYPE(rtx, brs) != HAWK_VAL_MBS) hawk_rtx_freemem(rtx, rrs.ptr); if (rrs.ptr && HAWK_RTX_GETVALTYPE(rtx, brs) != HAWK_VAL_MBS) hawk_rtx_freemem(rtx, rrs.ptr);
hawk_rtx_refdownval(rtx, bfs); hawk_rtx_refdownval_inline(rtx, bfs);
hawk_rtx_refdownval(rtx, brs); hawk_rtx_refdownval_inline(rtx, brs);
return ret; return ret;
} }
+756 -509
View File
File diff suppressed because it is too large Load Diff
+33 -33
View File
@@ -2341,7 +2341,7 @@ static int open_rio_console (hawk_rtx_t* rtx, hawk_rio_arg_t* riod)
v_argc = hawk_rtx_getgbl(rtx, xtn->gbl_argc); v_argc = hawk_rtx_getgbl(rtx, xtn->gbl_argc);
HAWK_ASSERT(v_argc != HAWK_NULL); HAWK_ASSERT(v_argc != HAWK_NULL);
if (hawk_rtx_valtoint(rtx, v_argc, &i_argc) <= -1) return -1; if (hawk_rtx_valtoint_inline(rtx, v_argc, &i_argc) <= -1) return -1;
/* handle special case when ARGV[x] has been altered. /* handle special case when ARGV[x] has been altered.
* so from here down, the file name gotten from * so from here down, the file name gotten from
@@ -2601,7 +2601,7 @@ static int apply_pending_rio_console_state(hawk_rtx_t* rtx, hawk_rio_arg_t* riod
if (!curpath) curpath = HAWK_T("-"); /* TODO: remember the actual special file name and use it? */ if (!curpath) curpath = HAWK_T("-"); /* TODO: remember the actual special file name and use it? */
if (hawk_rtx_setfilenamewithoochars(rtx, curpath, hawk_count_oocstr(curpath)) <= -1) return -1; if (hawk_rtx_setfilenamewithoochars(rtx, curpath, hawk_count_oocstr(curpath)) <= -1) return -1;
riod->uflags &= ~IO_UFLAG_CONSOLE_PENDING_NEXT; riod->uflags &= ~IO_UFLAG_CONSOLE_PENDING_NEXT;
hawk_rtx_setgbl(rtx, HAWK_GBL_FNR, hawk_rtx_makeintval(rtx, 0)); /* this won't fail as the int value is 0 */ hawk_rtx_setgbl(rtx, HAWK_GBL_FNR, hawk_rtx_makeintval_inline(rtx, 0)); /* this won't fail as the int value is 0 */
return 0; return 0;
} }
@@ -2791,30 +2791,30 @@ static int build_argcv (hawk_rtx_t* rtx, int argc_id, int argv_id, const hawk_oo
v_argv = hawk_rtx_makemapval(rtx); v_argv = hawk_rtx_makemapval(rtx);
if (v_argv == HAWK_NULL) return -1; if (v_argv == HAWK_NULL) return -1;
hawk_rtx_refupval(rtx, v_argv); hawk_rtx_refupval_inline(rtx, v_argv);
/* make ARGV[0] */ /* make ARGV[0] */
v_tmp = hawk_rtx_makestrvalwithoocstr(rtx, id); v_tmp = hawk_rtx_makestrvalwithoocstr(rtx, id);
if (v_tmp == HAWK_NULL) if (v_tmp == HAWK_NULL)
{ {
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
/* increment reference count of v_tmp in advance as if /* increment reference count of v_tmp in advance as if
* it has successfully been assigned into ARGV. */ * it has successfully been assigned into ARGV. */
hawk_rtx_refupval(rtx, v_tmp); hawk_rtx_refupval_inline(rtx, v_tmp);
key_len = hawk_copy_oocstr(key, HAWK_COUNTOF(key), HAWK_T("0")); key_len = hawk_copy_oocstr(key, HAWK_COUNTOF(key), HAWK_T("0"));
if (hawk_map_upsert(((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL) if (hawk_map_upsert(((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL)
{ {
/* if the assignment operation fails, decrements /* if the assignment operation fails, decrements
* the reference of v_tmp to free it */ * the reference of v_tmp to free it */
hawk_rtx_refdownval(rtx, v_tmp); hawk_rtx_refdownval_inline(rtx, v_tmp);
/* the values previously assigned into the /* the values previously assigned into the
* map will be freeed when v_argv is freed */ * map will be freeed when v_argv is freed */
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
@@ -2828,50 +2828,50 @@ static int build_argcv (hawk_rtx_t* rtx, int argc_id, int argv_id, const hawk_oo
v_tmp = hawk_rtx_makenumorstrvalwithoochars(rtx, *p, hawk_count_oocstr(*p), 1); v_tmp = hawk_rtx_makenumorstrvalwithoochars(rtx, *p, hawk_count_oocstr(*p), 1);
if (HAWK_UNLIKELY(!v_tmp)) if (HAWK_UNLIKELY(!v_tmp))
{ {
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
key_len = hawk_int_to_oocstr(argc, 10, HAWK_NULL, key, HAWK_COUNTOF(key)); key_len = hawk_int_to_oocstr(argc, 10, HAWK_NULL, key, HAWK_COUNTOF(key));
HAWK_ASSERT(key_len != (hawk_oow_t)-1); HAWK_ASSERT(key_len != (hawk_oow_t)-1);
hawk_rtx_refupval(rtx, v_tmp); hawk_rtx_refupval_inline(rtx, v_tmp);
if (hawk_map_upsert(((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL) if (hawk_map_upsert(((hawk_val_map_t*)v_argv)->map, key, key_len, v_tmp, 0) == HAWK_NULL)
{ {
hawk_rtx_refdownval(rtx, v_tmp); hawk_rtx_refdownval_inline(rtx, v_tmp);
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
} }
} }
else argc = 1; else argc = 1;
v_argc = hawk_rtx_makeintval(rtx, (hawk_int_t)argc); v_argc = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)argc);
if (v_argc == HAWK_NULL) if (v_argc == HAWK_NULL)
{ {
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
hawk_rtx_refupval(rtx, v_argc); hawk_rtx_refupval_inline(rtx, v_argc);
if (hawk_rtx_setgbl(rtx, argc_id, v_argc) <= -1) if (hawk_rtx_setgbl(rtx, argc_id, v_argc) <= -1)
{ {
hawk_rtx_refdownval(rtx, v_argc); hawk_rtx_refdownval_inline(rtx, v_argc);
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
if (hawk_rtx_setgbl(rtx, argv_id, v_argv) <= -1) if (hawk_rtx_setgbl(rtx, argv_id, v_argv) <= -1)
{ {
hawk_rtx_refdownval(rtx, v_argc); hawk_rtx_refdownval_inline(rtx, v_argc);
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return -1; return -1;
} }
hawk_rtx_refdownval(rtx, v_argc); hawk_rtx_refdownval_inline(rtx, v_argc);
hawk_rtx_refdownval(rtx, v_argv); hawk_rtx_refdownval_inline(rtx, v_argv);
return 0; return 0;
} }
@@ -2894,7 +2894,7 @@ static int build_environ (hawk_rtx_t* rtx, int gbl_id, env_char_t* envarr[])
v_env = hawk_rtx_makemapval(rtx); v_env = hawk_rtx_makemapval(rtx);
if (v_env == HAWK_NULL) return -1; if (v_env == HAWK_NULL) return -1;
hawk_rtx_refupval(rtx, v_env); hawk_rtx_refupval_inline(rtx, v_env);
if (envarr) if (envarr)
{ {
@@ -2929,7 +2929,7 @@ static int build_environ (hawk_rtx_t* rtx, int gbl_id, env_char_t* envarr[])
{ {
if (kptr) hawk_rtx_freemem(rtx, kptr); if (kptr) hawk_rtx_freemem(rtx, kptr);
if (vptr) hawk_rtx_freemem(rtx, vptr); if (vptr) hawk_rtx_freemem(rtx, vptr);
hawk_rtx_refdownval(rtx, v_env); hawk_rtx_refdownval_inline(rtx, v_env);
return -1; return -1;
} }
@@ -2946,7 +2946,7 @@ static int build_environ (hawk_rtx_t* rtx, int gbl_id, env_char_t* envarr[])
{ {
if (kptr) hawk_rtx_freemem(rtx, kptr); if (kptr) hawk_rtx_freemem(rtx, kptr);
if (vptr) hawk_rtx_freeme(rtx, vptr): if (vptr) hawk_rtx_freeme(rtx, vptr):
hawk_rtx_refdownval(rtx, v_env); hawk_rtx_refdownval_inline(rtx, v_env);
return -1; return -1;
} }
@@ -2966,19 +2966,19 @@ static int build_environ (hawk_rtx_t* rtx, int gbl_id, env_char_t* envarr[])
if (vptr) hawk_rtx_freemem(rtx, vptr); if (vptr) hawk_rtx_freemem(rtx, vptr);
if (kptr) hawk_rtx_freemem(rtx, kptr); if (kptr) hawk_rtx_freemem(rtx, kptr);
#endif #endif
hawk_rtx_refdownval(rtx, v_env); hawk_rtx_refdownval_inline(rtx, v_env);
return -1; return -1;
} }
/* increment reference count of v_tmp in advance as if /* increment reference count of v_tmp in advance as if
* it has successfully been assigned into ARGV. */ * it has successfully been assigned into ARGV. */
hawk_rtx_refupval(rtx, v_tmp); hawk_rtx_refupval_inline(rtx, v_tmp);
if (hawk_map_upsert(((hawk_val_map_t*)v_env)->map, kptr, klen, v_tmp, 0) == HAWK_NULL) if (hawk_map_upsert(((hawk_val_map_t*)v_env)->map, kptr, klen, v_tmp, 0) == HAWK_NULL)
{ {
/* if the assignment operation fails, decrements /* if the assignment operation fails, decrements
* the reference of v_tmp to free it */ * the reference of v_tmp to free it */
hawk_rtx_refdownval(rtx, v_tmp); hawk_rtx_refdownval_inline(rtx, v_tmp);
#if ((defined(ENV_CHAR_IS_BCH) && defined(HAWK_OOCH_IS_BCH)) || \ #if ((defined(ENV_CHAR_IS_BCH) && defined(HAWK_OOCH_IS_BCH)) || \
(defined(ENV_CHAR_IS_UCH) && defined(HAWK_OOCH_IS_UCH))) (defined(ENV_CHAR_IS_UCH) && defined(HAWK_OOCH_IS_UCH)))
@@ -2990,7 +2990,7 @@ static int build_environ (hawk_rtx_t* rtx, int gbl_id, env_char_t* envarr[])
/* the values previously assigned into the /* the values previously assigned into the
* map will be freeed when v_env is freed */ * map will be freeed when v_env is freed */
hawk_rtx_refdownval(rtx, v_env); hawk_rtx_refdownval_inline(rtx, v_env);
return -1; return -1;
} }
@@ -3007,11 +3007,11 @@ static int build_environ (hawk_rtx_t* rtx, int gbl_id, env_char_t* envarr[])
if (hawk_rtx_setgbl(rtx, gbl_id, v_env) <= -1) if (hawk_rtx_setgbl(rtx, gbl_id, v_env) <= -1)
{ {
hawk_rtx_refdownval(rtx, v_env); hawk_rtx_refdownval_inline(rtx, v_env);
return -1; return -1;
} }
hawk_rtx_refdownval(rtx, v_env); hawk_rtx_refdownval_inline(rtx, v_env);
return 0; return 0;
} }
@@ -3453,7 +3453,7 @@ done:
if (ret >= 0) if (ret >= 0)
{ {
v[0] = hawk_rtx_makeintval(rtx, (hawk_int_t)fret); v[0] = hawk_rtx_makeintval_inline(rtx, (hawk_int_t)fret);
if (v[0] == HAWK_NULL) return -1; if (v[0] == HAWK_NULL) return -1;
hawk_rtx_setretval(rtx, v[0]); hawk_rtx_setretval(rtx, v[0]);
} }
@@ -3500,7 +3500,7 @@ static int fnc_getioattr (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
if ((tmout = timeout_code (ptr[1])) >= 0) if ((tmout = timeout_code (ptr[1])) >= 0)
{ {
if (ioattr->tmout[tmout].nsec == 0) if (ioattr->tmout[tmout].nsec == 0)
rv = hawk_rtx_makeintval(rtx, ioattr->tmout[tmout].sec); rv = hawk_rtx_makeintval_inline(rtx, ioattr->tmout[tmout].sec);
else else
rv = hawk_rtx_makefltval(rtx, (hawk_flt_t)ioattr->tmout[tmout].sec + HAWK_NSEC_TO_SEC((hawk_flt_t)ioattr->tmout[tmout].nsec)); rv = hawk_rtx_makefltval(rtx, (hawk_flt_t)ioattr->tmout[tmout].sec + HAWK_NSEC_TO_SEC((hawk_flt_t)ioattr->tmout[tmout].nsec));
if (rv == HAWK_NULL) if (rv == HAWK_NULL)
@@ -3538,9 +3538,9 @@ done:
{ {
if (rv) if (rv)
{ {
hawk_rtx_refupval(rtx, rv); hawk_rtx_refupval_inline(rtx, rv);
ret = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 2), rv); ret = hawk_rtx_setrefval(rtx, (hawk_val_ref_t*)hawk_rtx_getarg(rtx, 2), rv);
hawk_rtx_refdownval(rtx, rv); hawk_rtx_refdownval_inline(rtx, rv);
if (ret >= 0) hawk_rtx_setretval(rtx, HAWK_VAL_ZERO); if (ret >= 0) hawk_rtx_setretval(rtx, HAWK_VAL_ZERO);
} }
else else
+9
View File
@@ -249,6 +249,15 @@ struct hawk_nde_var_t
} id; } id;
hawk_nde_t* idx; /* HAWK_NULL for non-XXXXIDX */ hawk_nde_t* idx; /* HAWK_NULL for non-XXXXIDX */
hawk_uint8_t is_const; hawk_uint8_t is_const;
#if defined(HAWK_ENABLE_NAMED_LOOKUP_CACHE)
struct
{
hawk_rtx_t* rtx;
hawk_htb_pair_t* pair;
hawk_oow_t gen;
hawk_uint8_t valid;
} ncache;
#endif
}; };
#define HAWK_NDE_FNCALL_FNC_DEFERRED_MODFNC (1 << 0) #define HAWK_NDE_FNCALL_FNC_DEFERRED_MODFNC (1 << 0)
+3 -1
View File
@@ -687,7 +687,9 @@ static int print_expr (hawk_t* hawk, hawk_nde_t* nde, int depth)
case HAWK_NDE_NAMED: case HAWK_NDE_NAMED:
{ {
hawk_nde_var_t* px = (hawk_nde_var_t*)nde; hawk_nde_var_t* px = (hawk_nde_var_t*)nde;
HAWK_ASSERT (px->id.idxa == (hawk_oow_t)-1); /*HAWK_ASSERT (px->id.idxa == (hawk_oow_t)-1);
* commented out the above assertion because
* id.idxa field holds an index to the rtx->named_slots. */
HAWK_ASSERT (px->idx == HAWK_NULL); HAWK_ASSERT (px->idx == HAWK_NULL);
PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len); PUT_SRCSTRN(hawk, px->id.name.ptr, px->id.name.len);
+128
View File
@@ -27,6 +27,11 @@
#define HAWK_VAL_CHUNK_SIZE 100 #define HAWK_VAL_CHUNK_SIZE 100
/* this has been commented out and isn't necessary as the implemenation is
* context(rtx)-centric. I'll leave it here for experiment for those who like
* to turn it on.
#define HAWK_USE_ATOMIC_REFCNT */
typedef struct hawk_val_chunk_t hawk_val_chunk_t; typedef struct hawk_val_chunk_t hawk_val_chunk_t;
typedef struct hawk_val_ichunk_t hawk_val_ichunk_t; typedef struct hawk_val_ichunk_t hawk_val_ichunk_t;
typedef struct hawk_val_rchunk_t hawk_val_rchunk_t; typedef struct hawk_val_rchunk_t hawk_val_rchunk_t;
@@ -181,6 +186,19 @@ extern hawk_val_t* hawk_val_zls;
/* represents an empty byte string */ /* represents an empty byte string */
extern hawk_val_t* hawk_val_zlbs; extern hawk_val_t* hawk_val_zlbs;
hawk_val_t* hawk_rtx_makeintval_full (
hawk_rtx_t* rtx,
hawk_int_t v
);
#if defined(HAWK_HAVE_INLINE)
static HAWK_INLINE_ALWAYS hawk_val_t* hawk_rtx_makeintval_inline (hawk_rtx_t* rtx, hawk_int_t v)
{
return HAWK_IN_INT_RANGE(v)? HAWK_INT_TO_VTR(v): hawk_rtx_makeintval_full(rtx, v);
}
#else
#define hawk_rtx_makeintval_inline(rtx, v) (HAWK_IN_INT_RANGE(v)? HAWK_INT_TO_VTR(v): hawk_rtx_makeintval_full(rtx, v))
#endif
void hawk_rtx_freeval ( void hawk_rtx_freeval (
hawk_rtx_t* rtx, hawk_rtx_t* rtx,
@@ -193,6 +211,116 @@ void hawk_rtx_freevalchunk (
hawk_val_chunk_t* chunk hawk_val_chunk_t* chunk
); );
#if defined(HAWK_HAVE_INLINE)
static HAWK_INLINE_ALWAYS void hawk_rtx_refupval_inline (hawk_rtx_t* rtx, hawk_val_t* val)
{
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val))
{
#if defined(HAWK_USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_ADD)
HAWK_ATOMIC_FETCH_ADD(&val->v_refs, 1, HAWK_ATOMIC_RELAXED);
#else
val->v_refs++;
#endif
}
}
#elif defined(HAWK_USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_ADD)
#define hawk_rtx_refupval_inline(rtx, val) do { \
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val)) { \
HAWK_ATOMIC_FETCH_ADD(&(val)->v_refs, 1, HAWK_ATOMIC_RELAXED); \
} \
} while(0)
#else
#define hawk_rtx_refupval_inline(rtx, val) do { \
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val)) (val)->v_refs++; \
} while(0)
#endif
#if defined(HAWK_HAVE_INLINE)
static HAWK_INLINE_ALWAYS void hawk_rtx_refdownval_inline (hawk_rtx_t* rtx, hawk_val_t* val)
{
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val))
{
HAWK_ASSERT(val->v_refs > 0);
#if defined(HAWK_USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_SUB)
if (HAWK_ATOMIC_FETCH_SUB(&val->v_refs, 1, HAWK_ATOMIC_RELAXED) == 1)
hawk_rtx_freeval(rtx, val, HAWK_RTX_FREEVAL_CACHE);
#else
val->v_refs--;
if (val->v_refs <= 0) hawk_rtx_freeval(rtx, val, HAWK_RTX_FREEVAL_CACHE);
#endif
}
}
#elif defined(HAWK_USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_SUB)
#define hawk_rtx_refdownval_inline(rtx, val) do { \
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val)) \
{ \
HAWK_ASSERT(val->v_refs > 0); \
if (HAWK_ATOMIC_FETCH_SUB(&(val)->v_refs, 1, HAWK_ATOMIC_RELAXED) == 1) \
hawk_rtx_freeval(rtx, val, HAWK_RTX_FREEVAL_CACHE); \
} \
} while(0)
#else
#define hawk_rtx_refdownval_inline(rtx, val) do { \
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val)) \
{ \
HAWK_ASSERT(val->v_refs > 0); \
(val)->v_refs--; \
if ((val)->v_refs <= 0) hawk_rtx_freeval(rtx, val, HAWK_RTX_FREEVAL_CACHE); \
} \
} while(0)
#endif
#if defined(HAWK_HAVE_INLINE)
static HAWK_INLINE_ALWAYS void hawk_rtx_refdownval_nofree_inline (hawk_rtx_t* rtx, hawk_val_t* val)
{
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val))
{
HAWK_ASSERT(val->v_refs > 0);
#if defined(HAWK_USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_SUB)
HAWK_ATOMIC_FETCH_SUB(&val->v_refs, 1, HAWK_ATOMIC_RELAXED);
#else
val->v_refs--;
#endif
}
}
#elif defined(HAWK_USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_SUB)
#define hawk_rtx_refdownval_nofree_inline(rtx, val) do { \
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val)) \
{ \
HAWK_ASSERT(val->v_refs > 0); \
HAWK_ATOMIC_FETCH_SUB(&(val)->v_refs, 1, HAWK_ATOMIC_RELAXED);
} \
} while(0)
#else
#define hawk_rtx_refdownval_nofree_inline(rtx, val) do { \
if (HAWK_VTR_IS_POINTER(val) && !HAWK_IS_STATICVAL(val)) \
{ \
HAWK_ASSERT(val->v_refs > 0); \
(val)->v_refs--; \
} \
} while(0)
#endif
#if defined(HAWK_HAVE_INLINE)
static HAWK_INLINE int hawk_rtx_valtoint_inline (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l)
{
int n;
hawk_flt_t r;
n = hawk_rtx_valtonum(rtx, v, l, &r);
if (n == 1)
{
*l = (hawk_int_t)r;
n = 0;
}
return n;
}
#else
/* i can't easily inlinde this function without using compiler extentions or changing the return value to a parameter */
#define hawk_rtx_valtoint_inline(rtx, v, l) hawk_rtx_valtoint(rtx, v, l)
#endif
#if defined(__cplusplus) #if defined(__cplusplus)
} }
#endif #endif
+104 -110
View File
@@ -26,10 +26,6 @@
#define CHUNKSIZE HAWK_VAL_CHUNK_SIZE #define CHUNKSIZE HAWK_VAL_CHUNK_SIZE
/* this isn't necessary as the implemenation is context(rtx)-centric
* leave it here for experiment.
#define USE_ATOMIC_REFCNT */
static hawk_val_nil_t hawk_nil = { static hawk_val_nil_t hawk_nil = {
HAWK_SFN(v_refs) 0, HAWK_SFN(v_refs) 0,
HAWK_SFN(v_type) HAWK_VAL_NIL, HAWK_SFN(v_type) HAWK_VAL_NIL,
@@ -583,7 +579,7 @@ hawk_val_t* hawk_rtx_makebchrval (hawk_rtx_t* rtx, hawk_bch_t v)
return HAWK_BCHR_TO_VTR((hawk_bchu_t)v); return HAWK_BCHR_TO_VTR((hawk_bchu_t)v);
} }
hawk_val_t* hawk_rtx_makeintval (hawk_rtx_t* rtx, hawk_int_t v) hawk_val_t* hawk_rtx_makeintval_full (hawk_rtx_t* rtx, hawk_int_t v)
{ {
hawk_val_int_t* val; hawk_val_int_t* val;
@@ -633,22 +629,27 @@ hawk_val_t* hawk_rtx_makeintval (hawk_rtx_t* rtx, hawk_int_t v)
val->nde = HAWK_NULL; val->nde = HAWK_NULL;
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("makeintval => %jd [%p] - [%O]\n"), (hawk_intmax_t)v, val, val); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("makeintval => %jd [%p] - [%O]\n"), (hawk_intmax_t)v, val, val);
#endif #endif
return (hawk_val_t*)val; return (hawk_val_t*)val;
} }
hawk_val_t* hawk_rtx_makeintval (hawk_rtx_t* rtx, hawk_int_t v)
{
return HAWK_IN_INT_RANGE(v)? HAWK_INT_TO_VTR(v): hawk_rtx_makeintval_full(rtx, v);
}
hawk_val_t* hawk_rtx_makefltval (hawk_rtx_t* rtx, hawk_flt_t v) hawk_val_t* hawk_rtx_makefltval (hawk_rtx_t* rtx, hawk_flt_t v)
{ {
hawk_val_flt_t* val; hawk_val_flt_t* val;
if (rtx->vmgr.rfree == HAWK_NULL) if (!rtx->vmgr.rfree)
{ {
hawk_val_rchunk_t* c; hawk_val_rchunk_t* c;
hawk_oow_t i; hawk_oow_t i;
c = hawk_rtx_allocmem(rtx, HAWK_SIZEOF(hawk_val_rchunk_t)); c = hawk_rtx_allocmem(rtx, HAWK_SIZEOF(hawk_val_rchunk_t));
if (!c) return HAWK_NULL; if (HAWK_UNLIKELY(!c)) return HAWK_NULL;
c->next = rtx->vmgr.rchunk; c->next = rtx->vmgr.rchunk;
rtx->vmgr.rchunk = (hawk_val_chunk_t*)c; rtx->vmgr.rchunk = (hawk_val_chunk_t*)c;
@@ -672,7 +673,7 @@ hawk_val_t* hawk_rtx_makefltval (hawk_rtx_t* rtx, hawk_flt_t v)
val->nde = HAWK_NULL; val->nde = HAWK_NULL;
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("makefltval => %Lf [%p] - [%O]\n"), (double)v, val, val); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("makefltval => %Lf [%p] - [%O]\n"), (double)v, val, val);
#endif #endif
return (hawk_val_t*)val; return (hawk_val_t*)val;
} }
@@ -713,12 +714,12 @@ init:
val->v_gc = 0; val->v_gc = 0;
val->val.len = len1 + len2; val->val.len = len1 + len2;
val->val.ptr = (hawk_ooch_t*)(val + 1); val->val.ptr = (hawk_ooch_t*)(val + 1);
if (HAWK_LIKELY(str1)) hawk_copy_oochars_to_oocstr_unlimited (&val->val.ptr[0], str1, len1); if (HAWK_LIKELY(str1)) hawk_copy_oochars_to_oocstr_unlimited(&val->val.ptr[0], str1, len1);
if (str2) hawk_copy_oochars_to_oocstr_unlimited (&val->val.ptr[len1], str2, len2); if (str2) hawk_copy_oochars_to_oocstr_unlimited(&val->val.ptr[len1], str2, len2);
val->val.ptr[val->val.len] = '\0'; val->val.ptr[val->val.len] = '\0';
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("make_str_val => %p - [%O]\n"), val, val); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("make_str_val => %p - [%O]\n"), val, val);
#endif #endif
return (hawk_val_t*)val; return (hawk_val_t*)val;
} }
@@ -829,7 +830,7 @@ hawk_val_t* hawk_rtx_makenumorstrvalwithuchars (hawk_rtx_t* rtx, const hawk_uch_
{ {
// always on or auto detect // always on or auto detect
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r); x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
if (x == 0) return hawk_rtx_makeintval(rtx, l); if (x == 0) return hawk_rtx_makeintval_inline(rtx, l);
else if (x >= 1) return hawk_rtx_makefltval(rtx, r); else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
} }
@@ -850,7 +851,7 @@ hawk_val_t* hawk_rtx_makenumorstrvalwithbchars (hawk_rtx_t* rtx, const hawk_bch_
{ {
// always on or auto detect // always on or auto detect
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r); x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
if (x == 0) return hawk_rtx_makeintval(rtx, l); if (x == 0) return hawk_rtx_makeintval_inline(rtx, l);
else if (x >= 1) return hawk_rtx_makefltval(rtx, r); else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
} }
@@ -963,12 +964,12 @@ init:
val->v_gc = 0; val->v_gc = 0;
val->val.len = len1 + len2; val->val.len = len1 + len2;
val->val.ptr = (hawk_bch_t*)(val + 1); val->val.ptr = (hawk_bch_t*)(val + 1);
if (HAWK_LIKELY(mbs1)) hawk_copy_bchars_to_bcstr_unlimited (&val->val.ptr[0], mbs1, len1); if (HAWK_LIKELY(mbs1)) hawk_copy_bchars_to_bcstr_unlimited(&val->val.ptr[0], mbs1, len1);
if (mbs2) hawk_copy_bchars_to_bcstr_unlimited (&val->val.ptr[len1], mbs2, len2); if (mbs2) hawk_copy_bchars_to_bcstr_unlimited(&val->val.ptr[len1], mbs2, len2);
val->val.ptr[val->val.len] = '\0'; val->val.ptr[val->val.len] = '\0';
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("make_mbs_val => %p - [%O]\n"), val, val); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("make_mbs_val => %p - [%O]\n"), val, val);
#endif #endif
return (hawk_val_t*)val; return (hawk_val_t*)val;
} }
@@ -1048,7 +1049,7 @@ hawk_val_t* hawk_rtx_makenumormbsvalwithuchars (hawk_rtx_t* rtx, const hawk_uch_
if (mode > 0 || (mode == 0 && HAWK_RTX_IS_NUMSTRDETECT_ON(rtx))) if (mode > 0 || (mode == 0 && HAWK_RTX_IS_NUMSTRDETECT_ON(rtx)))
{ {
x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r); x = hawk_uchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
if (x == 0) return hawk_rtx_makeintval(rtx, l); if (x == 0) return hawk_rtx_makeintval_inline(rtx, l);
else if (x >= 1) return hawk_rtx_makefltval(rtx, r); else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
} }
@@ -1067,7 +1068,7 @@ hawk_val_t* hawk_rtx_makenumormbsvalwithbchars (hawk_rtx_t* rtx, const hawk_bch_
if (mode > 0 || (mode == 0 && HAWK_RTX_IS_NUMSTRDETECT_ON(rtx))) if (mode > 0 || (mode == 0 && HAWK_RTX_IS_NUMSTRDETECT_ON(rtx)))
{ {
x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r); x = hawk_bchars_to_num(HAWK_OOCHARS_TO_NUM_MAKE_OPTION(1, 1, HAWK_RTX_IS_STRIPSTRSPC_ON(rtx), 0), ptr, len, &l, &r);
if (x == 0) return hawk_rtx_makeintval(rtx, l); if (x == 0) return hawk_rtx_makeintval_inline(rtx, l);
else if (x >= 1) return hawk_rtx_makefltval(rtx, r); else if (x >= 1) return hawk_rtx_makefltval(rtx, r);
} }
@@ -1099,7 +1100,7 @@ hawk_val_t* hawk_rtx_makerexval (hawk_rtx_t* rtx, const hawk_oocs_t* str, hawk_t
val->str.len = str->len; val->str.len = str->len;
val->str.ptr = (hawk_ooch_t*)(val + 1); val->str.ptr = (hawk_ooch_t*)(val + 1);
hawk_copy_oochars_to_oocstr_unlimited (val->str.ptr, str->ptr, str->len); hawk_copy_oochars_to_oocstr_unlimited(val->str.ptr, str->ptr, str->len);
val->code[0] = code[0]; val->code[0] = code[0];
val->code[1] = code[1]; val->code[1] = code[1];
@@ -1115,7 +1116,7 @@ static void free_arrval (hawk_arr_t* arr, void* dptr, hawk_oow_t dlen)
hawk_val_t* v = (hawk_val_t*)dptr; hawk_val_t* v = (hawk_val_t*)dptr;
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown in arr free - [%O]\n"), v); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown in arr free - [%O]\n"), v);
#endif #endif
#if defined(HAWK_ENABLE_GC) #if defined(HAWK_ENABLE_GC)
@@ -1128,19 +1129,18 @@ static void free_arrval (hawk_arr_t* arr, void* dptr, hawk_oow_t dlen)
} }
#endif #endif
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
} }
static void same_arrval (hawk_arr_t* map, void* dptr, hawk_oow_t dlen) static void same_arrval (hawk_arr_t* map, void* dptr, hawk_oow_t dlen)
{ {
hawk_rtx_t* rtx = *(hawk_rtx_t**)hawk_arr_getxtn(map); hawk_rtx_t* rtx = *(hawk_rtx_t**)hawk_arr_getxtn(map);
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown nofree in arr free - [%O]\n"), dptr); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown nofree in arr free - [%O]\n"), dptr);
#endif #endif
hawk_rtx_refdownval_nofree(rtx, dptr); hawk_rtx_refdownval_nofree_inline(rtx, dptr);
} }
hawk_val_t* hawk_rtx_makearrval (hawk_rtx_t* rtx, hawk_ooi_t init_capa) hawk_val_t* hawk_rtx_makearrval (hawk_rtx_t* rtx, hawk_ooi_t init_capa)
{ {
static hawk_arr_style_t style = static hawk_arr_style_t style =
@@ -1218,7 +1218,7 @@ static void free_mapval (hawk_map_t* map, void* dptr, hawk_oow_t dlen)
hawk_val_t* v = (hawk_val_t*)dptr; hawk_val_t* v = (hawk_val_t*)dptr;
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown in map free - [%O]\n"), v); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown in map free - [%O]\n"), v);
#endif #endif
#if defined(HAWK_ENABLE_GC) #if defined(HAWK_ENABLE_GC)
@@ -1231,16 +1231,16 @@ static void free_mapval (hawk_map_t* map, void* dptr, hawk_oow_t dlen)
} }
#endif #endif
hawk_rtx_refdownval(rtx, v); hawk_rtx_refdownval_inline(rtx, v);
} }
static void same_mapval (hawk_map_t* map, void* dptr, hawk_oow_t dlen) static void same_mapval (hawk_map_t* map, void* dptr, hawk_oow_t dlen)
{ {
hawk_rtx_t* rtx = *(hawk_rtx_t**)hawk_map_getxtn(map); hawk_rtx_t* rtx = *(hawk_rtx_t**)hawk_map_getxtn(map);
#if defined(DEBUG_VAL) #if defined(DEBUG_VAL)
hawk_logfmt (hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown nofree in map free - [%O]\n"), dptr); hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("refdown nofree in map free - [%O]\n"), dptr);
#endif #endif
hawk_rtx_refdownval_nofree(rtx, dptr); hawk_rtx_refdownval_nofree_inline(rtx, dptr);
} }
hawk_val_t* hawk_rtx_makemapval (hawk_rtx_t* rtx) hawk_val_t* hawk_rtx_makemapval (hawk_rtx_t* rtx)
@@ -1328,7 +1328,7 @@ hawk_val_t* hawk_rtx_makemapvalwithdata (hawk_rtx_t* rtx, hawk_val_map_data_t da
map = hawk_rtx_makemapval(rtx); map = hawk_rtx_makemapval(rtx);
if (HAWK_UNLIKELY(!map)) return HAWK_NULL; if (HAWK_UNLIKELY(!map)) return HAWK_NULL;
hawk_rtx_refupval(rtx, map); hawk_rtx_refupval_inline(rtx, map);
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
{ {
@@ -1354,7 +1354,7 @@ hawk_val_t* hawk_rtx_makemapvalwithdata (hawk_rtx_t* rtx, hawk_val_map_data_t da
{ {
iv = *(hawk_int_t*)p->vptr; iv = *(hawk_int_t*)p->vptr;
} }
tmp = hawk_rtx_makeintval(rtx, iv); tmp = hawk_rtx_makeintval_inline(rtx, iv);
break; break;
} }
@@ -1395,13 +1395,13 @@ hawk_val_t* hawk_rtx_makemapvalwithdata (hawk_rtx_t* rtx, hawk_val_map_data_t da
if (tmp == HAWK_NULL || hawk_rtx_setmapvalfld(rtx, map, p->key.ptr, p->key.len, tmp) == HAWK_NULL) if (tmp == HAWK_NULL || hawk_rtx_setmapvalfld(rtx, map, p->key.ptr, p->key.len, tmp) == HAWK_NULL)
{ {
if (tmp) hawk_rtx_freeval(rtx, tmp, HAWK_RTX_FREEVAL_CACHE); if (tmp) hawk_rtx_freeval(rtx, tmp, HAWK_RTX_FREEVAL_CACHE);
hawk_rtx_refdownval(rtx, map); hawk_rtx_refdownval_inline(rtx, map);
return HAWK_NULL; return HAWK_NULL;
} }
} }
hawk_rtx_refdownval_nofree(rtx, map); hawk_rtx_refdownval_nofree_inline(rtx, map);
return map; return map;
} }
@@ -1415,7 +1415,7 @@ hawk_val_t* hawk_rtx_setmapvalfld (hawk_rtx_t* rtx, hawk_val_t* map, const hawk_
* and refdown() the value if htb_upsert() fails. that way, the value * and refdown() the value if htb_upsert() fails. that way, the value
* can be destroyed if it was passed with the reference count of 0. * can be destroyed if it was passed with the reference count of 0.
* so we increment the reference count when htb_upsert() is complete */ * so we increment the reference count when htb_upsert() is complete */
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
return v; return v;
} }
@@ -1473,7 +1473,7 @@ hawk_val_t* hawk_rtx_setarrvalfld (hawk_rtx_t* rtx, hawk_val_t* arr, hawk_ooi_t
* and refdown() the value if htb_upsert() fails. that way, the value * and refdown() the value if htb_upsert() fails. that way, the value
* can be destroyed if it was passed with the reference count of 0. * can be destroyed if it was passed with the reference count of 0.
* so we increment the reference count when htb_upsert() is complete */ * so we increment the reference count when htb_upsert() is complete */
hawk_rtx_refupval(rtx, v); hawk_rtx_refupval_inline(rtx, v);
return v; return v;
} }
@@ -1758,65 +1758,17 @@ void hawk_rtx_freeval (hawk_rtx_t* rtx, hawk_val_t* val, int flags)
void hawk_rtx_refupval(hawk_rtx_t* rtx, hawk_val_t* val) void hawk_rtx_refupval(hawk_rtx_t* rtx, hawk_val_t* val)
{ {
if (HAWK_VTR_IS_POINTER(val)) hawk_rtx_refupval_inline(rtx, val);
{
if (HAWK_IS_STATICVAL(val)) return;
#if defined(DEBUG_VAL)
hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("ref up [ptr=%p] [count=%d] - [%O]\n"), val, (int)val->v_refs, val);
#endif
#if defined(USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_ADD)
HAWK_ATOMIC_FETCH_ADD(&val->v_refs, 1, HAWK_ATOMIC_RELAXED);
#else
val->v_refs++;
#endif
}
} }
void hawk_rtx_refdownval(hawk_rtx_t* rtx, hawk_val_t* val) void hawk_rtx_refdownval(hawk_rtx_t* rtx, hawk_val_t* val)
{ {
if (HAWK_VTR_IS_POINTER(val)) hawk_rtx_refdownval_inline(rtx, val);
{
if (HAWK_IS_STATICVAL(val)) return;
#if defined(DEBUG_VAL)
hawk_logfmt(hawk_rtx_gethawk(rtx), HAWK_LOG_STDERR, HAWK_T("ref down [ptr=%p] [count=%d] - [%O]\n"), val, (int)val->v_refs, val);
#endif
/* the reference count of a value should be greater than zero for it to be decremented. check the source code for any bugs */
HAWK_ASSERT(val->v_refs > 0);
#if defined(USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_SUB)
if (HAWK_ATOMIC_FETCH_SUB(&val->v_refs, 1, HAWK_ATOMIC_RELAXED) == 1)
{
hawk_rtx_freeval(rtx, val, HAWK_RTX_FREEVAL_CACHE);
}
#else
val->v_refs--;
if (val->v_refs <= 0)
{
hawk_rtx_freeval(rtx, val, HAWK_RTX_FREEVAL_CACHE);
}
#endif
}
} }
void hawk_rtx_refdownval_nofree (hawk_rtx_t* rtx, hawk_val_t* val) void hawk_rtx_refdownval_nofree (hawk_rtx_t* rtx, hawk_val_t* val)
{ {
if (HAWK_VTR_IS_POINTER(val)) hawk_rtx_refdownval_nofree_inline(rtx, val);
{
if (HAWK_IS_STATICVAL(val)) return;
/* the reference count of a value should be greater than zero for it to be decremented. check the source code for any bugs */
HAWK_ASSERT(val->v_refs > 0);
#if defined(USE_ATOMIC_REFCNT) && defined(HAWK_ATOMIC_FETCH_SUB)
HAWK_ATOMIC_FETCH_SUB(&val->v_refs, 1, HAWK_ATOMIC_RELAXED);
#else
val->v_refs--;
#endif
}
} }
void hawk_rtx_freevalchunk (hawk_rtx_t* rtx, hawk_val_chunk_t* chunk) void hawk_rtx_freevalchunk (hawk_rtx_t* rtx, hawk_val_chunk_t* chunk)
@@ -2153,8 +2105,7 @@ static int val_flt_to_str (hawk_rtx_t* rtx, const hawk_val_flt_t* v, hawk_rtx_va
{ {
hawk_ooch_t* tmp; hawk_ooch_t* tmp;
hawk_oow_t tmp_len; hawk_oow_t tmp_len;
hawk_ooecs_t buf, fbu; hawk_ooecs_t* buf, * fbu;
int buf_inited = 0, fbu_inited = 0;
int type = out->type & ~HAWK_RTX_VALTOSTR_PRINT; int type = out->type & ~HAWK_RTX_VALTOSTR_PRINT;
if (out->type & HAWK_RTX_VALTOSTR_PRINT) if (out->type & HAWK_RTX_VALTOSTR_PRINT)
@@ -2168,17 +2119,12 @@ static int val_flt_to_str (hawk_rtx_t* rtx, const hawk_val_flt_t* v, hawk_rtx_va
tmp_len = rtx->gbl.convfmt.len; tmp_len = rtx->gbl.convfmt.len;
} }
if (hawk_ooecs_init(&buf, hawk_rtx_getgem(rtx), 256) <= -1) return -1; buf = &rtx->format.fltout;
buf_inited = 1; fbu = &rtx->format.fltfmt;
hawk_ooecs_clear(buf);
hawk_ooecs_clear(fbu);
if (hawk_ooecs_init(&fbu, hawk_rtx_getgem(rtx), 256) <= -1) tmp = hawk_rtx_format(rtx, buf, fbu, tmp, tmp_len, (hawk_oow_t)-1, (hawk_nde_t*)v, &tmp_len);
{
hawk_ooecs_fini(&buf);
return -1;
}
fbu_inited = 1;
tmp = hawk_rtx_format(rtx, &buf, &fbu, tmp, tmp_len, (hawk_oow_t)-1, (hawk_nde_t*)v, &tmp_len);
if (HAWK_UNLIKELY(!tmp)) goto oops; if (HAWK_UNLIKELY(!tmp)) goto oops;
switch (type) switch (type)
@@ -2200,14 +2146,14 @@ static int val_flt_to_str (hawk_rtx_t* rtx, const hawk_val_flt_t* v, hawk_rtx_va
goto oops; goto oops;
} }
hawk_copy_oochars_to_oocstr_unlimited (out->u.cplcpy.ptr, tmp, tmp_len); hawk_copy_oochars_to_oocstr_unlimited(out->u.cplcpy.ptr, tmp, tmp_len);
out->u.cplcpy.len = tmp_len; out->u.cplcpy.len = tmp_len;
break; break;
case HAWK_RTX_VALTOSTR_CPLDUP: case HAWK_RTX_VALTOSTR_CPLDUP:
{ {
hawk_ooecs_yield (&buf, HAWK_NULL, 0); out->u.cpldup.ptr = hawk_rtx_dupoochars(rtx, tmp, tmp_len);
out->u.cpldup.ptr = tmp; if (HAWK_UNLIKELY(!out->u.cpldup.ptr)) goto oops;
out->u.cpldup.len = tmp_len; out->u.cpldup.len = tmp_len;
break; break;
} }
@@ -2236,13 +2182,9 @@ static int val_flt_to_str (hawk_rtx_t* rtx, const hawk_val_flt_t* v, hawk_rtx_va
} }
} }
hawk_ooecs_fini(&fbu);
hawk_ooecs_fini(&buf);
return 0; return 0;
oops: oops:
if (fbu_inited) hawk_ooecs_fini(&fbu);
if (buf_inited) hawk_ooecs_fini(&buf);
return -1; return -1;
} }
@@ -2926,6 +2868,13 @@ int hawk_rtx_valtonum (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l, hawk
int hawk_rtx_valtoint (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l) int hawk_rtx_valtoint (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l)
{ {
#if defined(HAWK_HAVE_INLINE)
return hawk_rtx_valtoint_inline(rtx, v, l);
#else
/* i can't call hawk_rtx_valtoint() in case HAWK_HAVE_INLINE is not defined
* because the macro hawk_rtx_valtoint_inline() is defined to be hawk_rtx_valtoint().
* repeat the same code here */
int n; int n;
hawk_flt_t r; hawk_flt_t r;
@@ -2937,6 +2886,7 @@ int hawk_rtx_valtoint (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_int_t* l)
} }
return n; return n;
#endif
} }
int hawk_rtx_valtoflt (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_flt_t* r) int hawk_rtx_valtoflt (hawk_rtx_t* rtx, const hawk_val_t* v, hawk_flt_t* r)
@@ -3256,6 +3206,14 @@ hawk_val_t* hawk_rtx_getrefval (hawk_rtx_t* rtx, hawk_val_ref_t* ref)
return HAWK_RTX_STACK_GBL(rtx, idx); return HAWK_RTX_STACK_GBL(rtx, idx);
} }
case HAWK_VAL_REF_NAMED:
{
hawk_oow_t idx;
idx = (hawk_oow_t)ref->adr;
HAWK_ASSERT(idx < rtx->named_slot_count);
return HAWK_RTX_STACK_NAMED(rtx, idx);
}
default: default:
{ {
hawk_val_t** xref = (hawk_val_t**)ref->adr; hawk_val_t** xref = (hawk_val_t**)ref->adr;
@@ -3302,16 +3260,16 @@ int hawk_rtx_setrefval (hawk_rtx_t* rtx, hawk_val_ref_t* ref, hawk_val_t* val)
hawk_oocs_t str; hawk_oocs_t str;
int x; int x;
hawk_rtx_refupval(rtx, val); hawk_rtx_refupval_inline(rtx, val);
str.ptr = hawk_rtx_getvaloocstr(rtx, val, &str.len); str.ptr = hawk_rtx_getvaloocstr(rtx, val, &str.len);
if (HAWK_UNLIKELY(!str.ptr)) if (HAWK_UNLIKELY(!str.ptr))
{ {
hawk_rtx_refdownval(rtx, val); hawk_rtx_refdownval_inline(rtx, val);
return -1; return -1;
} }
x = hawk_rtx_setrec(rtx, (hawk_oow_t)ref->adr, &str, 0); x = hawk_rtx_setrec(rtx, (hawk_oow_t)ref->adr, &str, 0);
hawk_rtx_freevaloocstr(rtx, val, str.ptr); hawk_rtx_freevaloocstr(rtx, val, str.ptr);
hawk_rtx_refdownval(rtx, val); hawk_rtx_refdownval_inline(rtx, val);
return x; return x;
} }
} }
@@ -3321,6 +3279,42 @@ int hawk_rtx_setrefval (hawk_rtx_t* rtx, hawk_val_ref_t* ref, hawk_val_t* val)
/* ref->adr is the index to the global variables, not a real pointer address for HAWK_VAL_REF_GBL */ /* ref->adr is the index to the global variables, not a real pointer address for HAWK_VAL_REF_GBL */
return hawk_rtx_setgbl(rtx, (int)ref->adr, val); return hawk_rtx_setgbl(rtx, (int)ref->adr, val);
case HAWK_VAL_REF_NAMED:
{
hawk_val_t* old;
hawk_val_type_t old_vtype;
HAWK_ASSERT((hawk_oow_t)ref->adr < rtx->named_slot_count);
old = HAWK_RTX_STACK_NAMED(rtx, (hawk_oow_t)ref->adr);
old_vtype = HAWK_RTX_GETVALTYPE(rtx, old);
if (vtype == HAWK_VAL_MAP || vtype == HAWK_VAL_ARR)
{
if (old_vtype != HAWK_VAL_NIL && old_vtype != vtype)
{
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
{
hawk_rtx_seterrnum(rtx, HAWK_NULL, HAWK_ESCALARTONONSCA);
return -1;
}
}
}
else
{
if (old_vtype == HAWK_VAL_MAP || old_vtype == HAWK_VAL_ARR)
{
if (!(rtx->hawk->opt.trait & HAWK_FLEXMAP))
{
hawk_rtx_seterrnum(rtx, HAWK_NULL, HAWK_ENONSCATOSCALAR);
return -1;
}
}
}
if (old != val) return hawk_rtx_setnamedval(rtx, (hawk_oow_t)ref->adr, val);
return 0;
}
case HAWK_VAL_REF_NAMEDIDX: case HAWK_VAL_REF_NAMEDIDX:
case HAWK_VAL_REF_GBLIDX: case HAWK_VAL_REF_GBLIDX:
case HAWK_VAL_REF_LCLIDX: case HAWK_VAL_REF_LCLIDX:
@@ -3372,9 +3366,9 @@ int hawk_rtx_setrefval (hawk_rtx_t* rtx, hawk_val_ref_t* ref, hawk_val_t* val)
if (*rref != val) if (*rref != val)
{ {
/* if the new value is not the same as the old value */ /* if the new value is not the same as the old value */
hawk_rtx_refdownval(rtx, *rref); hawk_rtx_refdownval_inline(rtx, *rref);
*rref = val; *rref = val;
hawk_rtx_refupval(rtx, *rref); hawk_rtx_refupval_inline(rtx, *rref);
} }
return 0; return 0;
} }
+2 -2
View File
@@ -33,9 +33,9 @@ static int fnc_errno (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi)
uctx_list_t* list; uctx_list_t* list;
hawk_val_t* retv; hawk_val_t* retv;
list = rtx_to_list (rtx, fi); list = rtx_to_list(rtx, fi);
retv = hawk_rtx_makeintval (rtx, list->errnum); retv = hawk_rtx_makeintval(rtx, list->errnum);
if (retv == HAWK_NULL) return -1; if (retv == HAWK_NULL) return -1;
hawk_rtx_setretval(rtx, retv); hawk_rtx_setretval(rtx, retv);
+3 -3
View File
@@ -154,10 +154,10 @@ The static library files for developing applications with Hawk.
%setup -q %setup -q
%build %build
RPM_OPT_FLAGS="$(echo $RPM_OPT_FLAGS | %{__sed} 's/-O2/-O3/')" RPM_CFLAGS="$(echo $RPM_OPT_FLAGS | %{__sed} 's/-O2/-O3/') -fPIC -fno-strict-aliasing"
##CFLAGS="${RPM_OPT_FLAGS} -fPIC" CXXFLAGS="${RPM_OPT_FLAGS} -fPIC -std=c++11" ./configure \ ##CFLAGS="${RPM_CFLAGS}" CXXFLAGS="${RPM_CFLAGS} -std=c++11" ./configure \
CFLAGS="${RPM_OPT_FLAGS} -fPIC" CXXFLAGS="${RPM_OPT_FLAGS} -fPIC" ./configure \ CFLAGS="${RPM_CFLAGS}" CXXFLAGS="${RPM_CFLAGS}" ./configure \
--prefix=%{_prefix} \ --prefix=%{_prefix} \
--libdir=%{_libdir} \ --libdir=%{_libdir} \
--sysconfdir=%{_sysconfdir} \ --sysconfdir=%{_sysconfdir} \
+2 -1
View File
@@ -20,7 +20,7 @@ endif
check_SCRIPTS += h-003.hawk h-004.hawk h-009.hawk h-010.hawk \ check_SCRIPTS += h-003.hawk h-004.hawk h-009.hawk h-010.hawk \
h-011.hawk h-012.hawk h-013.hawk h-014.hawk h-015.hawk \ h-011.hawk h-012.hawk h-013.hawk h-014.hawk h-015.hawk \
h-016.hawk h-017.hawk h-018.hawk h-019.hawk h-020.hawk \ h-016.hawk h-017.hawk h-018.hawk h-019.hawk h-020.hawk \
h-021.hawk h-022.hawk h-023.hawk h-021.hawk h-022.hawk h-023.hawk h-024.hawk
check_SCRIPTS += regress-filename.sh check_SCRIPTS += regress-filename.sh
@@ -32,6 +32,7 @@ EXTRA_DIST = $(check_SCRIPTS) $(check_ERRORS) tap.inc err.sh \
bibtex-to-html.hawk bibtex-to-html.out \ bibtex-to-html.hawk bibtex-to-html.out \
fs-test.hawk fs-test.in fs-test.out \ fs-test.hawk fs-test.in fs-test.out \
JSON.awk.in JSON.awk.out \ JSON.awk.in JSON.awk.out \
h-024-child.hawk h-024.in \
two-way-pipe.hawk two-way-pipe.out two-way-pipe.hawk two-way-pipe.out
check_PROGRAMS = t-001 t-002 t-003 t-004 t-005 t-006 t-007 t-008 t-009 check_PROGRAMS = t-001 t-002 t-003 t-004 t-005 t-006 t-007 t-008 t-009
+2 -1
View File
@@ -652,7 +652,7 @@ LIBADD_COMMON = ../lib/libhawk.la $(LIBM)
check_SCRIPTS = $(am__append_1) h-003.hawk h-004.hawk h-009.hawk \ check_SCRIPTS = $(am__append_1) h-003.hawk h-004.hawk h-009.hawk \
h-010.hawk h-011.hawk h-012.hawk h-013.hawk h-014.hawk \ h-010.hawk h-011.hawk h-012.hawk h-013.hawk h-014.hawk \
h-015.hawk h-016.hawk h-017.hawk h-018.hawk h-019.hawk \ h-015.hawk h-016.hawk h-017.hawk h-018.hawk h-019.hawk \
h-020.hawk h-021.hawk h-022.hawk h-023.hawk \ h-020.hawk h-021.hawk h-022.hawk h-023.hawk h-024.hawk \
regress-filename.sh regress-filename.sh
check_ERRORS = e-001.err check_ERRORS = e-001.err
EXTRA_DIST = $(check_SCRIPTS) $(check_ERRORS) tap.inc err.sh \ EXTRA_DIST = $(check_SCRIPTS) $(check_ERRORS) tap.inc err.sh \
@@ -660,6 +660,7 @@ EXTRA_DIST = $(check_SCRIPTS) $(check_ERRORS) tap.inc err.sh \
bibtex-to-html.hawk bibtex-to-html.out \ bibtex-to-html.hawk bibtex-to-html.out \
fs-test.hawk fs-test.in fs-test.out \ fs-test.hawk fs-test.in fs-test.out \
JSON.awk.in JSON.awk.out \ JSON.awk.in JSON.awk.out \
h-024-child.hawk h-024.in \
two-way-pipe.hawk two-way-pipe.out two-way-pipe.hawk two-way-pipe.out
t_001_SOURCES = t-001.c tap.h t_001_SOURCES = t-001.c tap.h
+82
View File
@@ -0,0 +1,82 @@
BEGIN {
if (CASE == 1)
{
ARGV[1] = "a=20";
}
else if (CASE == 2)
{
a = "hello world";
ARGV[1] = "a=20";
}
else if (CASE == 3)
{
x = "hello world";
ARGV[1] = "a=20";
}
else if (CASE == 4)
{
qa = "hello world";
ARGV[1] = "a=20";
}
else if (CASE == 5)
{
ARGV[1] = "a=20";
}
else if (CASE == 6)
{
a = "hello world";
ARGV[1] = "a=20";
}
else if (CASE == 7)
{
ARGV[1] = "a=20";
ARGV[2] = "bb=30";
}
else if (CASE == 8)
{
ARGV[1] = "a=20";
ARGV[2] = "qqq=99";
}
else if (CASE == 9)
{
ARGV[1] = "ddd=44";
}
else if (CASE == 10)
{
ARGV[1] = "a=20";
ARGV[2] = "bb=30";
ARGV[3] = "ccc=40";
}
else if (CASE == 11)
{
ARGV[1] = "rrr=300";
ARGV[2] = "ttt=500";
}
}
{
if (CASE == 1)
print qqq, a, $1;
else if (CASE == 2)
print qqq, a, $1;
else if (CASE == 3)
print qqq, a, x, $1;
else if (CASE == 4)
print qqq, qa, a, $1;
else if (CASE == 5)
print qqq, rrr, sss, a, $1;
else if (CASE == 6)
print qqq, rrr, a, $1;
else if (CASE == 7)
print qqq, a, bb, $1;
else if (CASE == 8)
print qqq, a, $1;
else if (CASE == 9)
print a, bb, ccc, ddd, $1;
else if (CASE == 10)
print qqq, a, bb, ccc, $1;
else if (CASE == 11)
print qqq, rrr, sss, ttt, $1;
exit;
}
+50
View File
@@ -0,0 +1,50 @@
@pragma entry main
@pragma implicit off
@include "tap.inc";
function slurp(path, line, out, first)
{
out = "";
first = 1;
while ((getline line < path) > 0)
{
if (!first) out = out "\n";
out = out line;
first = 0;
}
close(path);
return out;
}
function run_case(caseno, vopts, userargs, expected, cmd, inf, outf, got)
{
inf = sprintf("%s/%s", TDIR, "h-024.in");
outf = sprintf("/tmp/%s.%d.%d.out", "h-024", sys::getpid(), caseno);
cmd = sprintf("%s -vCASE=%d %s -f %s/%s --modlibdirs=%s %s %s > %s",
ARGV[0], caseno, vopts, TDIR, "h-024-child.hawk", hawk::modlibdirs(), userargs, inf, outf);
system(cmd);
got = slurp(outf);
tap_ensure(got, expected, @SCRIPTNAME, @SCRIPTLINE);
system(sprintf("rm -f %s", outf));
}
function main()
{
run_case(1, "-vqqq=20", "dummy", "20 20 alpha");
run_case(2, "-vqqq=20", "dummy", "20 20 alpha");
run_case(3, "-vqqq=20", "dummy", "20 20 hello world alpha");
run_case(4, "-vqqq=20", "dummy", "20 hello world 20 alpha");
run_case(5, "-vqqq=20 -vrrr=30 -vsss=forty", "dummy", "20 30 forty 20 alpha");
run_case(6, "-vqqq=20 -vrrr=30", "dummy", "20 30 20 alpha");
run_case(7, "-vqqq=20", "dummy1 dummy2", "20 20 30 alpha");
run_case(8, "-vqqq=20", "dummy1 dummy2", "99 20 alpha");
run_case(9, "-va=11 -vbb=22 -vccc=33", "dummy", "11 22 33 44 alpha");
run_case(10, "-vqqq=20 -va=11 -vbb=22", "dummy1 dummy2 dummy3", "20 20 30 40 alpha");
run_case(11, "-vqqq=20 -vrrr=30 -vsss=40", "dummy1 dummy2", "20 300 40 500 alpha");
tap_end();
}
+1
View File
@@ -0,0 +1 @@
alpha beta