comparison http/src/luan/modules/http/Http.luan @ 572:f1601a4ce1aa

fix stack when calling meta-methods
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 12 Jul 2015 21:34:23 -0600
parents aa17ad66a370
children 1e69d9c21461
comparison
equal deleted inserted replaced
571:cd944b010f25 572:f1601a4ce1aa
1 java() 1 java()
2 local Luan = require "luan:Luan" 2 local Luan = require "luan:Luan"
3 local ipairs = Luan.ipairs
4 local pairs = Luan.pairs
5 local error = Luan.error 3 local error = Luan.error
6 local set_metatable = Luan.set_metatable 4 local ipairs = Luan.ipairs or error()
5 local pairs = Luan.pairs or error()
6 local set_metatable = Luan.set_metatable or error()
7 local Io = require "luan:Io" 7 local Io = require "luan:Io"
8 local Html = require "luan:Html" 8 local Html = require "luan:Html"
9 local url_encode = Html.url_encode 9 local url_encode = Html.url_encode or error()
10 local HttpServicer = require "java:luan.modules.http.HttpServicer" 10 local HttpServicer = require "java:luan.modules.http.HttpServicer"
11 local IoLuan = require "java:luan.modules.IoLuan" 11 local IoLuan = require "java:luan.modules.IoLuan"
12 12
13 local M = {} 13 local M = {}
14 14
28 return function() 28 return function()
29 local key, value = iter() 29 local key, value = iter()
30 return key, value and value[1] 30 return key, value and value[1]
31 end 31 end
32 end 32 end
33
34 local function sent_error()
35 error "headers are not accessible after you start writing content"
36 end
37
38 M.sent_error_metatable = { __index=sent_error, __new_index=sent_error }
39
33 40
34 41
35 local function new_common(this) 42 local function new_common(this)
36 this = this or {} 43 this = this or {}
37 this.headers = {} 44 this.headers = {}
102 HttpServicer.removeCookie(M.request.java,this.java,name,domain) 109 HttpServicer.removeCookie(M.request.java,this.java,name,domain)
103 end 110 end
104 111
105 function this.set() 112 function this.set()
106 HttpServicer.setResponse(this,this.java) 113 HttpServicer.setResponse(this,this.java)
114 set_metatable(this.headers,M.sent_error_metatable)
107 end 115 end
108 116
109 function this.text_writer() 117 function this.text_writer()
110 this.set() 118 this.set()
111 return IoLuan.textWriter(this.java.getWriter()) 119 return IoLuan.textWriter(this.java.getWriter())