Skip to content

Commit

Permalink
v3.0.51, 代入的呼び出しの仕様変更(#290)
Browse files Browse the repository at this point in the history
  • Loading branch information
kujirahand committed Sep 6, 2018
1 parent 9331289 commit 43bb1b2
Show file tree
Hide file tree
Showing 9 changed files with 35 additions and 15 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,17 @@ $ nako3server
macOS

```
# 『圧縮』『解凍』命令のために
brew install p7zip
```

Ubuntu/Debian

```
# 『圧縮』『解凍』命令のために
sudo apt-get install p7zip-full
# 『キー送信』命令のために
sudo apt-get install xdotool
```

全てのコマンドが正しく動くかを確認するには、以下のコマンドを実行します。
Expand Down
10 changes: 7 additions & 3 deletions doc/plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
```
{
'定数名': { 定義 },
'命令名': { 定義 },
'命令名': { 定義 },
...
}
```

### 定義:関数

プラグインの実体は、Object。
プラグインの実体は、Object。実際の関数定義は、fnプロパティに行う。実際の関数の引数に加えて、システムを表すsysを用意する。

```
{
Expand Down Expand Up @@ -103,12 +103,16 @@ if (typeof (navigator) === 'object') {
type: 'func',
josi: [],
fn: function (sys) {
const result = sys.__exec('HOGE', [arg1, arg2, arg3])
const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
console.log(result)
}
}
```

また、関数の引数に与える、sysはなでしこ自身を表す。
もし、代入的関数呼び出し(setter)であれば、sys.isSetterにtrueの値が入る。


なお、プラグインでは、以下のメソッドが使えるようになる。(すべて src/plugin_system.jsで定義されている。システム関数の初期化時に、これらの関数が追加される。)

- sys.__findVar(name)
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "nadesiko3",
"version": "3.0.50",
"version": "3.0.51",
"description": "Japanese Programming Language",
"main": "src/index.js",
"bin": {
Expand Down
1 change: 1 addition & 0 deletions src/nako3.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class NakoCompiler {
this.__module = {} // requireなどで取り込んだモジュールの一覧
this.funclist = {} // プラグインで定義された関数
this.pluginfiles = {} // 取り込んだファイル一覧
this.isSetter = false // 代入的関数呼び出しを管理(#290)
// 必要なオブジェクトを覚えておく
this.prepare = prepare
this.lexer = lexer
Expand Down
16 changes: 10 additions & 6 deletions src/nako_gen.js
Original file line number Diff line number Diff line change
Expand Up @@ -739,18 +739,22 @@ class NakoGen {
if (typeof (this.used_func[funcName]) === 'undefined') {
this.used_func[funcName] = true
}
// setter ?
if (node['setter']) argsOpts['setter'] = true
// 関数呼び出しで、引数の末尾にthisを追加する-システム情報を参照するため
args.push('__self')
if (argsOpts) args.push(JSON.stringify(argsOpts))

let funcBegin = ''
let funcEnd = ''
// setter?
if (node['setter']) {
funcBegin = ';__self.isSetter = true;'
funcEnd = ';__self.isSetter = false;'
}
// 関数呼び出しコードの構築
let argsCode = args.join(',')
let code = `${funcNameS}(${argsCode})`
if (func.return_none) {
code = `${code};\n`
code = `${funcBegin}${code};${funcEnd}\n`
} else {
code = `(function(){ const tmp=${this.sore}=${code}; return tmp }).call(this)`
code = `(function(){ ${funcBegin}const tmp=${this.sore}=${code}; return tmp;${funcEnd}; }).call(this)`
// ...して
if (node.josi === 'して') {
code += ';\n'
Expand Down
4 changes: 2 additions & 2 deletions src/plugin_node.js
Original file line number Diff line number Diff line change
Expand Up @@ -476,9 +476,9 @@ const PluginNode = {
'クリップボード': { // @クリップボードを取得設定(『クリップボード=値』で書換が可能) // @くりっぷぼーど
type: 'func',
josi: [['を']],
fn: function (v, sys, opt) {
fn: function (v, sys) {
const ncp = require('copy-paste')
if (opt && opt['setter']) return ncp.copy(v)
if (sys.isSetter) return ncp.copy(v)
return ncp.paste()
}
},
Expand Down
2 changes: 1 addition & 1 deletion src/plugin_system.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const PluginSystem = {
type: 'func',
josi: [],
fn: function (sys) {
sys.__v0['ナデシコバージョン'] = '3.0.50'
sys.__v0['ナデシコバージョン'] = '3.0.51'
// システム関数を探す
sys.__getSysValue = function (name, def) {
if (sys.__v0[name] === undefined) return def
Expand Down
5 changes: 3 additions & 2 deletions test/func_call.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,11 @@ describe('関数呼び出しテスト', () => {
it('連続文後の=代入', () => {
cmp('対象日=1504191600を日時変換して「 」まで切り取る。対象日を表示。', '2017/09/01')
})
it('関数の代入的呼び出し1', () => {
// 代入的呼び出し(#290)
it('関数の代入的呼び出し(#290)その1', () => {
cmp('INTに3.5を代入;それを表示;', '3')
})
it('関数の代入的呼び出し2', () => {
it('関数の代入的呼び出し(#290)その2', () => {
cmp('INT=3.5;それを表示;', '3')
cmp('INTは3.5;それを表示;', '3')
})
Expand Down
6 changes: 6 additions & 0 deletions test/plugin_node_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,10 @@ describe('plugin_node_test', () => {
it('ファイル情報取得', () => {
cmp('「' + testFileMe + '」のファイル情報取得;もし、それ["size"]が2000以上ならば;「OK」と表示。違えば「NG」と表示。', 'OK')
})
/*
it('クリップボード', () => {
const rnd = 'a' + Math.random()
cmp('クリップボード="' + rnd + '";クリップボードを表示。', rnd)
})
*/
})

0 comments on commit 43bb1b2

Please sign in to comment.