Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3232992bbe | |||
| 06c62443bf | |||
| e5694bb330 | |||
| 1780afec23 | |||
| 1638426f9b | |||
| 057a0496d8 | |||
| 4c974da2a2 | |||
| 93c2fd5f7f |
+1
-1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+31
-4
@@ -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;
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
alpha beta
|
||||||
Reference in New Issue
Block a user