nadesiko3 3.2.35 → 3.2.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,18 +118,30 @@ function dncl2nako(src, filename) {
118
118
  //「S1とS2とS3を表示する」を「(S1)&(S2)&S3)を表示」と置き換える
119
119
  // あまりスマートではないが手抜きで
120
120
  if (line.indexOf('表示') >= 0) {
121
- const r5 = line.match(/^(.+?)と(.+?)と(.+?)と(.+?)と(.+?)を表示/)
121
+ const r6 = line.match(/^(.+?)と(.+?)と(.+?)と(.+?)と(.+?)と(.+?)(を|と)表示/)
122
+ if (r6) {
123
+ const s1 = r6[1]
124
+ const s2 = r6[2]
125
+ const s3 = r6[3]
126
+ const s4 = r6[4]
127
+ const s5 = r6[5]
128
+ const s6 = r6[6]
129
+ result += `(${s1})&(${s2})&(${s3})&(${s4})&(${s5})&(${s6})を表示`
130
+ src = src.substring(r6[0].length)
131
+ continue
132
+ }
133
+ const r5 = line.match(/^(.+?)と(.+?)と(.+?)と(.+?)と(.+?)(を|と)表示/)
122
134
  if (r5) {
123
135
  const s1 = r5[1]
124
136
  const s2 = r5[2]
125
137
  const s3 = r5[3]
126
138
  const s4 = r5[4]
127
- const s5 = r5[4]
139
+ const s5 = r5[5]
128
140
  result += `(${s1})&(${s2})&(${s3})&(${s4})&(${s5})を表示`
129
141
  src = src.substring(r5[0].length)
130
142
  continue
131
143
  }
132
- const r4 = line.match(/^(.+?)と(.+?)と(.+?)と(.+?)を表示/)
144
+ const r4 = line.match(/^(.+?)と(.+?)と(.+?)と(.+?)(を|と)表示/)
133
145
  if (r4) {
134
146
  const s1 = r4[1]
135
147
  const s2 = r4[2]
@@ -139,7 +151,7 @@ function dncl2nako(src, filename) {
139
151
  src = src.substring(r4[0].length)
140
152
  continue
141
153
  }
142
- const r3 = line.match(/^(.+?)と(.+?)と(.+?)を表示/)
154
+ const r3 = line.match(/^(.+?)と(.+?)と(.+?)(を|と)表示/)
143
155
  if (r3) {
144
156
  const s1 = r3[1]
145
157
  const s2 = r3[2]
package/src/nako_gen.js CHANGED
@@ -856,11 +856,13 @@ try {
856
856
  let codeArray = ''
857
857
  // codeInit?
858
858
  if (node.checkInit) {
859
- codeInit += `\n/*配列初期化*/if (typeof(${name}) !== 'object') { ${name} = [] }; `
860
- for (let i = 0; i < list.length; i++) {
859
+ const arrayDefCode = '[0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0]'
860
+ codeInit += `\n/*配列初期化*/if (!(${name} instanceof Array)) { ${name} = ${arrayDefCode}; console.log('初期化:${name}') };`
861
+ for (let i = 0; i < list.length - 1; i++) {
861
862
  const idx = this._convGen(list[i], true)
862
863
  codeArray += `[${idx}]`
863
- codeInit += `if (typeof(${name}${codeArray}) !== 'object') { ${name}${codeArray} = [] }; `
864
+ codeInit += `\n/*配列初期化${i}*/if (!(${name}${codeArray} instanceof Array)) { ${name}${codeArray} = ${arrayDefCode}; };`
865
+ // codeInit += `\n/*配列初期化${i}*/if (!(${name}${codeArray} instanceof Array)) { ${name}${codeArray} = ${arrayDefCode}; console.log('初期化:${i}:${name}${codeArray}',JSON.stringify(${name})) }; `
864
866
  }
865
867
  codeInit += '\n'
866
868
  }
@@ -872,7 +874,8 @@ try {
872
874
  const value = this._convGen(node.value, true)
873
875
  code += ' = ' + value + ';\n'
874
876
  // generate code
875
- return this.convLineno(node, false) + codeInit + code
877
+ const src = this.convLineno(node, false) + codeInit + code
878
+ return src
876
879
  }
877
880
 
878
881
  convGenLoop (node) {
@@ -1,8 +1,8 @@
1
1
  // なでしこバージョン
2
2
  const nakoVersion = {
3
- version: '3.2.35',
3
+ version: '3.2.36',
4
4
  major: 3,
5
5
  minor: 2,
6
- patch: 35
6
+ patch: 36
7
7
  }
8
8
  module.exports = nakoVersion
@@ -46,12 +46,18 @@ describe('dncl (#1140)', () => {
46
46
  cmpNako('!DNCLモード\nA={{11,12,13},{21,22,23}}。C=2;AA=A[1+C,1];AAを表示', '13')
47
47
  cmpNako('!DNCLモード\nA={{11,12,13},{21,22,23}}。X=2;Y=1;AA=A[X,Y+1];AAを表示', '22')
48
48
  })
49
- it('配列の自動初期化', () => {
50
- cmpNako('!DNCLモード\nA[1]←111。AをJSONエンコードして表示する', '[111]')
51
- cmpNako('!DNCLモード\nA[1]=1,A[2]=2;AをJSONエンコードして表示する', '[1,2]')
49
+ it('配列の自動初期化(#1143)', () => {
50
+ cmpNako('!DNCLモード\nA[1]←111。A[1]を表示する', '111')
51
+ cmpNako('!DNCLモード\nA[3,3]=3;A[3,3]を表示する', '3')
52
+ cmpNako('!DNCLモード\nA[3,2,1]=30;A[3,2,1]を表示する', '30')
53
+ cmpNako('!DNCLモード\nA[1,1]=11,A[1,2]=12;A[1,2]を表示する', '12')
52
54
  })
53
55
  it('インデントを|で表現する', () => {
54
56
  cmpNako('!DNCLモード\nA=3;もしA>1ならば\n|A←A+1\nを実行する。\nAを表示する。', '4')
55
57
  })
58
+ it('表示エミュレート', () => {
59
+ cmpNako('!DNCLモード\nx←10,y←20\nxと"-"とyを表示する。', '10-20')
60
+ cmpNako('!DNCLモード\nx←10,y←20\n"("とxと","とyと")"を表示する。', '(10,20)')
61
+ })
56
62
  })
57
63